OpenStruct#respond_to? when true fails with NameError
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
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- 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