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,调用的是父类的方法。

最新文章

  1. 深入理解PHP内核(十三)类的结构和实现
  2. html设置360兼容/极速模式
  3. build.gradle 使用tips
  4. 每个Web开发者必备的9个软技能
  5. Entity Framework技巧系列之二 - Tip 6 - 8
  6. Linux 常见目录与区别
  7. [Vim]新建python文件自动添加python header
  8. golang接口三个特性
  9. php、apache、nginx、线程、进程
  10. 解决在vscode中eslint在vue后缀文件中保存时无法自动格式化的问题
  11. PCL-CMAKELIST书写格式
  12. day15--认识模块、导入模块、自执行与模块的区别
  13. How to remove popup on boot on Windows 2003
  14. Spring Boot MyBatis配置多种数据库
  15. 04-树5 Root of AVL Tree + AVL树操作集
  16. PL/SQL出现存储过程注释中文乱码
  17. 全网最详细的Sublime Text 3的安装Package Control插件管理包(图文详解)
  18. selenium WebDriver处理文件下载
  19. C#编写的 8种初级+高级排序方法(转)
  20. InstallShield 2015 LimitedEdition VS2012 运行bat文件

热门文章

  1. Matlab中导入文本文件中的数据 矩阵合并 以及C++中删除文件操作
  2. Advising controllers with the @ControllerAdvice annotation
  3. python练习题-day4
  4. webmin小结
  5. python-面向对象-13_文件
  6. MySQL中drop,delete与truncate的区别
  7. Mac OSX上卸载Anaconda
  8. 使用python脚本实现统计日志文件中的ip访问次数
  9. 010-ThreadGroup线程组
  10. NYOJ 92