poza faktem, że jest to metoda (a więc ocenia swoje argumenty, jak każda metoda robi) masz do opuszczenia wspólnego korzystania przypadki, aby znaleźć różnicę.
Na przykład, jeśli nie
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
Następnie Bar
jest jego metoda nowa_nazwa nadpisane, a Foo
jest nietknięty
Jak zawsze, jeśli to zmienić, aby korzystać alias
tj
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
Następnie klasa Bar
pozostaje niezmieniona, a Foo
zyskuje metodę ca lled: nowa_nazwa. Nie różni się to od różnicy między używaniem define_method
a definiowaniem metody za pomocą def
.
W jednym przypadku zakres jest czysto leksykalny: położenie linii wywołującej alias
całkowicie określa, co się dzieje, podczas gdy w drugim przypadku jest to wartość self
, gdy ruby ocenia ten fragment kodu.
Możesz, ale nie wiesz, ale tylko dla twoich informacji. Należy tutaj zwrócić uwagę na to, że 'alias' nie jest metodą, ale jest słowem kluczowym. Gdyby była to metoda, druga nie działałaby. – sawa
@sawa pierwszy nie działałby z powodu brakujących ',' pomiędzy argumentami – Stefan
@Stefan Masz rację. Tęsknie za tym. – sawa