ruby中的alias和alias_method
2024-09-27 02:19:09
ruby中的alias和alias_method都可以重命名一个方法,它们的区别如下:
1.alias是ruby的一个关键字,因此使用的时候是alias :newname :oldname
alias_method是Module类的一个方法,因此使用的时候是alias_method :newname,:oldname,有一个逗号。
2.alias的参数可以使用函数名或者符号,不能是字符串。
alias_method的参数可以是字符串,或者符号。
如下代码:
class Array
alias :f1 :first
alias f2 first
alias_method :f3,:first
alias_method "f4","first"
end
p [1,2,3].f1
p [1,2,3].f2
p [1,2,3].f3
p [1,2,3].f4
输出:
1
1
1
1
3.它们在下面一种情况下有区别。
class A def method_1
p "this is method 1 in A"
end def A.rename
alias :method_2 :method_1
end
end class B < A
def method_1
p "This is method 1 in B"
end rename
end B.new.method_2
class A def method_1
p "This is method 1 in A"
end def A.rename
alias_method :method_2,:method_1
end
end class B < A def method_1
p "This is method 1 in B"
end rename
end
B.new.method_2
输出是
"This is method 1 in A"
"This is method 1 in B"
从结果可以看到,如果是alias_method,调用的是子类的方法,如果用的是alias,调用的是父类的方法。
最新文章
- 深入理解PHP内核(十三)类的结构和实现
- html设置360兼容/极速模式
- build.gradle 使用tips
- 每个Web开发者必备的9个软技能
- Entity Framework技巧系列之二 - Tip 6 - 8
- Linux 常见目录与区别
- [Vim]新建python文件自动添加python header
- golang接口三个特性
- php、apache、nginx、线程、进程
- 解决在vscode中eslint在vue后缀文件中保存时无法自动格式化的问题
- PCL-CMAKELIST书写格式
- day15--认识模块、导入模块、自执行与模块的区别
- How to remove popup on boot on Windows 2003
- Spring Boot MyBatis配置多种数据库
- 04-树5 Root of AVL Tree + AVL树操作集
- PL/SQL出现存储过程注释中文乱码
- 全网最详细的Sublime Text 3的安装Package Control插件管理包(图文详解)
- selenium WebDriver处理文件下载
- C#编写的 8种初级+高级排序方法(转)
- InstallShield 2015 LimitedEdition VS2012 运行bat文件