Помимо того, что один метод (и так оцениваете свои аргументы, как и любой метод делает), вы должны покинуть общее пользование чтобы найти разницу.
Например, если вы делаете
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
Тогда Bar
имеет свой метод new_name перезаписаны, и Foo
нетронутым
Как всегда, если вы изменить это использовать alias
т.е.
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
Затем класс Bar
не изменяется, и Foo
получает метод ca lled: new_name. Это не похоже на разницу между использованием define_method
и определением метода с def
.
В одном случае область обзора является чисто лексической: местоположение линии, вызывающей alias
, полностью определяет, что происходит, тогда как в другом случае это значение self
, когда рубин оценивает этот бит кода.
Вы можете или не знать, но только для информации. Здесь следует отметить, что 'alias' - это не метод, а ключевое слово. Если бы это был метод, то второй не работал бы. – sawa
@sawa первый из них не работает ни из-за отсутствия ',' между аргументами – Stefan
@Stefan Вы правы. Я пропустил это. – sawa