Frage

Mögliche Duplizieren:
undef - Warum würden Sie eine Methode undefine wollen in ruby?

legen kann jemand einen praktischen Nutzen für undef in Ruby aus? Ich komme aus Sprachen wie JavaScript und Python, die nicht über sie gebaut Sie könnten natürlich ist es in einer Sprache wie Javascript simulieren.

var obj = { func:function(){alert("works")} }
obj.func() // -> "works"
delete(obj["func"])
obj.func() //->obj.func() is not a function

, aber ich habe nie wirklich Verwendung dafür habe. Gibt es einige Situationen, in denen gemeinsame undef tatsächlich nützlich ist?

Bearbeiten - über diese kam gerade in dem Buch "The Ruby Programmiersprache":

Eine andere Technik, um zu verhindern das Kopieren von Objekten ist undef einfach zu bedienen des Klons und DUP Methoden entfernen. Noch Ein weiterer Ansatz ist die neu zu definieren Klon und dup Methoden, so dass sie eine Ausnahme mit einem Fehler aus Nachricht, dass speziell sagt, dass Kopien sind nicht gestattet. So ein Fehlermeldung könnte hilfreich sein, um Programmierer, die Ihre Klasse verwenden.

War es hilfreich?

Lösung

I can only say that I've never had a use for it in 5 years. Perhaps more usefully, grepping through the entire source of rails shows only 7 instances and they're all meta-programming related. (undef_method has rather more instances at 22). It appears to be useful for testing the behaviour of classes with and without modules mixed-in.

Hopefully someone can point out some more conventional uses for it.

EDIT See this previous question: undef - Why would you want to undefine a method in ruby?

Andere Tipps

Blocking a child class from calling a method defined in the superclass (this is actually used in mongrel's setup.rb) (paraphrasing):

class Item
  def set
    do_something
  end
end

class ExecItem < Item
  undef set
end

Though I guess undef_method would have the same effect.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top