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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top