Question
Possible en double: FNUD - Pourquoi voudriez-vous une méthode annuler la définition en rubis
Quelqu'un peut-il poser une utilisation pratique pour FNUD en rubis? Je viens de langues comme javascript et python qui ne l'ont pas construit Vous pouvez simuler de cours dans une langue comme javascript:.
var obj = { func:function(){alert("works")} }
obj.func() // -> "works"
delete(obj["func"])
obj.func() //->obj.func() is not a function
mais je ne l'ai jamais vraiment eu usage pour cela. Y a-t-il des situations communes où FNUD est réellement utile?
EDIT - Juste suis tombé sur ce dans le livre « The Ruby Langage de programmation »:
Une autre technique pour empêcher la copie des objets est d'utiliser undef simplement supprimer le clone et les méthodes dup. Encore Une autre approche est de redéfinir la méthodes de clonage et dup afin qu'ils déclencher une exception avec une erreur un message qui dit expressément que les copies ne sont pas autorisés. Un tel message d'erreur peut être utile les programmeurs qui utilisent votre classe.
La solution
Je ne peux dire que je ne l'ai jamais eu une utilisation pour en 5 ans. Peut-être plus utilement, grep à travers toute source de rails ne montre que 7 instances et ils sont tous liés méta-programmation. (A undef_method cas un peu plus à 22). Il semble être utile pour tester le comportement des classes avec et sans modules mixtes dans.
Espérons que quelqu'un peut signaler quelques utilisations plus conventionnelles pour elle.
EDIT Voir cette question précédente: FNUD - Pourquoi voulez-vous veulent une méthode en annuler la définition rubis?
Autres conseils
Blocage une classe d'enfants d'appeler une méthode définie dans la superclasse (ce qui est utilisé dans le setup.rb
de bâtarde) (paraphrase):
class Item
def set
do_something
end
end
class ExecItem < Item
undef set
end
Bien que je suppose que undef_method
aurait le même effet.