uso pratico per undef [duplicato]
Domanda
Eventuali duplicati:
undef - Perché si vuole ridefinisca un metodo in ruby?
Qualcuno può tracciare un uso pratico per undef in Ruby? Vengo da linguaggi come JavaScript e Python che non li supportano Si potrebbe naturalmente di simulare in un linguaggio come javascript:.
var obj = { func:function(){alert("works")} }
obj.func() // -> "works"
delete(obj["func"])
obj.func() //->obj.func() is not a function
ma non ho mai veramente avuto uso per questo. Ci sono alcune situazioni comuni in cui undef è effettivamente utile?
Modifica - Proprio imbattuto in questo nel libro "The Ruby Programming Language":
Un'altra tecnica per evitare la copia di oggetti è usare undef semplicemente rimuovere il clone e metodi duplicati. Ancora Un altro approccio è quello di ridefinire il metodi clone e duplicati in modo che sollevare un'eccezione con un errore messaggio che specificamente afferma che le copie non sono consentiti. Come un messaggio di errore potrebbe essere utile programmatori che utilizzano la classe.
Soluzione
posso solo dire che non ho mai avuto un uso per esso in 5 anni. Forse più utilmente, grep attraverso l'intera fonte di rotaie spettacoli solo 7 istanze e sono tutti di meta-programmazione relativa. (Ha undef_method piuttosto più istanze a 22). Sembra essere utile per testare il comportamento delle classi con e senza moduli misti-in.
Speriamo che qualcuno può indicare alcuni usi più convenzionali per esso.
Modifica Vedere questa domanda precedente: undef - perché si dovrebbe vuole ridefinisca un metodo in ruby?
Altri suggerimenti
Blocco una classe figlia di chiamare un metodo definito nella superclasse (questo è effettivamente utilizzato in setup.rb
di ibrido) (parafrasando):
class Item
def set
do_something
end
end
class ExecItem < Item
undef set
end
Anche se immagino undef_method
avrebbe lo stesso effetto.