Помимо синтаксиса, основное отличие заключается в определении объема :
# scoping with alias_method
class User
def full_name
puts "Johnnie Walker"
end
def self.add_rename
alias_method :name, :full_name
end
end
class Developer < User
def full_name
puts "Geeky geek"
end
add_rename
end
Developer.new.name #=> 'Geeky geek'
В приведенном выше случае метод «name» выбирает метод «full_name», определенный в «Developer»учебный класс.Теперь давайте попробуем с alias
.
class User
def full_name
puts "Johnnie Walker"
end
def self.add_rename
alias name full_name
end
end
class Developer < User
def full_name
puts "Geeky geek"
end
add_rename
end
Developer.new.name #=> 'Johnnie Walker'
При использовании псевдонима метод «name» не может выбрать метод «full_name», определенный в Developer.
Это потому, чтоalias
является ключевым словом и имеет лексическую область видимости.Это означает, что он обрабатывает self
как значение self во время чтения исходного кода.В отличие от этого alias_method
обрабатывает self
как значение, определенное во время выполнения.
Источник: http://blog.bigbinary.com/2012/01/08/alias-vs-alias-method.html