defself.add_alias alias alias_mobile mobile alias_method :alias_name, :name # 另一种写法 # alias :alias_mobile :mobile # alias_method 'alias_name', 'name' end
add_alias end
classDeveloper < User
defname puts "developer name is Linus Torvalds" end
defmobile puts "developer mobile is 186-9999-9999" end
add_alias end
user = User.new dev = Developer.new
dev.alias_mobile # => user mobile is 186-1111-1111 user.alias_mobile # => user mobile is 186-1111-1111 puts "-" * 20 dev.alias_name # => developer name is Linus Torvalds user.alias_name # => user name is Johnnie Walker
语法层面的差异可以忽略, new_name old_name 的顺序总是弄混.
在继承关系中, alias_name 的内容被重写, alias_mobile并没有.
This is because alias is a keyword and it is lexically scoped. It means it treats self as the value of self at the time the source code was read . In contrast alias_method treats self as the value determined at the run time.