ruby / ruby/ostruct

OpenStruct#respond_to? when true fails with NameError

Ouverte
#55 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
Ruby
Étoiles
175
Forks
35
Merge moyen
16 h 14 min
PR mergées (30 j)
1

Description

Hello,

I have a case where I overrode respond_to? on a subclass of OpenStruct because I this class to work as fake object.

class Dep
  def a
    "Hello from Dep"
  end
end
class FakeDep < OpenStruct
  def respond_to?(*args)
    super || Dep.new.respond_to?(*args)
  end  
end

FakeDep.new(a: [])  #=> NameError: undefined method `a' for class `FakeDep'

      owner = method!(name).owner
              ^^^^^^^
from /usr/local/lib/ruby/3.1.0/ostruct.rb:245:in `method'

I didn't fully understand https://github.com/ruby/ruby/commit/f48edc28dda3df962f289fd373c06a8dfeda3dc0 and what happens with owner = method!(name).owner. Is the error above a valid case?

TIA

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Reproduisez l’exemple FakeDep avec l’implémentation de OpenStruct dans ostruct.rb autour de la ligne 245, puis lisez le commit lié pour comprendre la logique de method! et owner. Comparez le NameError observé avec le comportement attendu de respond_to? ; le travail est terminé lorsqu’il est établi s’il s’agit d’un bug pris en charge et que la couverture de régression ou le changement de comportement nécessaire est identifié.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
ruby
Domaine
backend
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.