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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top