Al di là del fatto che uno è un metodo (e quindi valuta i suoi argomenti come qualsiasi metodo fa) dovete lasciare l'uso comune casi per trovare una differenza.
Per esempio, se si fa
class Foo
def old_name
'foo'
end
def self.rename_name
alias_method :new_name, :old_name
end
end
class Bar < Foo
def new_name
'bar'
end
end
Bar.rename_name
Poi Bar
ha il suo metodo new_name sovrascritti, e Foo
è intatta
Come mai, se si modifica questa opzione per utilizzare alias
cioè
class Foo
def old_name
'foo'
end
def self.rename_name
alias :new_name :old_name
end
end
class Bar < Foo
def new_name
'bar'
end
end
Bar.rename_name
Quindi la classe Bar
non è stata modificata e ottiene un metodo ca lled: new_name. Questo non è diverso dalla differenza tra l'utilizzo di define_method
rispetto alla definizione di un metodo con def
.
In un caso l'ambito è puramente lessicale: la posizione della linea che chiama alias
determina completamente cosa succede, mentre nell'altro caso è il valore di self
quando ruby valuta quel bit del codice.
fonte
2014-09-17 14:23:28
Si può o non si può sapere, ma solo per vostra informazione. Una cosa da notare qui è che 'alias' non è un metodo ma è una parola chiave. Se fosse un metodo, il secondo non funzionerebbe. – sawa
@sawa il primo non funzionerebbe neanche a causa della mancanza ',' tra gli argomenti – Stefan
@Stefan Hai ragione. Ho perso questo. – sawa