alias和alias_method的区别:
2024-10-16 15:48:52
1、alias 是 Ruby 的一个关键字,因此使用的时候是 alias :new name :oldname,而 alias_method 是 module 类的一个方法,因此使用的时候是 alias_method(:newname, :oldname)有一个逗号
2、alias_method 可以重定义,alias 不能。
3。方法调用时的参数不同,alias_method要求参数是字符串或者符号变量,alias使用变量名或者符合变量,
4. 作用域不同
前面有强调在顶级作用域main中,只能通过alias进行别名定义,而不能使用alias_mehtod是因为在main中调不到Module#alias_method
方法,而alias是关键字的缘故,所以能正常在main中使用。
⚠️:通过alias定义方法别名,其变量self
的内容是固定不变的,即self
所代表的是调用的对象,而alias_method
方法中的self
却是在运行时确定的,看下面代码:
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 #执行类方法,但alias是关键字,在定义时,已经绑定了self为User
end
Developer.new.name #=> 'Johnnie Walker'
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 #执行类方法。self是Developer。
end
Developer.new.name #=> 'Gekky geek'
最新文章
- C#调用vbs脚本实现Windows版Siri
- vue-resource初体验
- mysql多种方法修改密码----5.6的坑
- 关于GridView只显示一样的问题
- 20140213-想念是while里的死循环
- Android开发中如何解决加载大图片时内存溢出的问题
- WebService支持多平台上传文件的实现
- 前端自动化部署之gulp
- 各种浏览器开启JavaScript脚本方法
- Couchbase忘记登录密码怎么办
- VirtualBox的共享文件夹功能的使用演示
- logstash收集TCP端口日志
- Window下通过SecureCRT的SSH2跳转到另一台Linux服务器
- 关于关键字 volatile
- Linux的1000个命令
- 关于ORA-12505, TNS:listener does not currently know of SID given in connect descriptor报错问题解决办法
- JS频率控制函数
- 20155236 2016-2017-2 《Java程序设计》第八周学习总结
- 【转】每天一个linux命令(48):watch命令
- 032:基于Consul和MGR的MySQL高可用架构