ruby中的alias和alias_method
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,调用的是父类的方法。
ruby中的alias和alias_method的更多相关文章
- ruby中如何调用与局部变量同名的私有方法
如果ruby中一个局部变量名和私有方法名同名的话,默认该名称被解释为变量而不是方法: x=10; def x;puts "what?" end 当你输入x实际不能执行x方法.解释器 ...
- 谈谈Ruby中的类变量
Ruby中的类变量,很多文章都是不太建议使用的,主要原因在于他的一些特性容易导致犯一些错误,尤其在广泛使用元编程的时候. 初步接触类变量可能觉得他跟C++的类静态成员和Java中的静态变量没什么区别, ...
- [翻译]理解Ruby中的blocks,Procs和lambda
原文出处:Understanding Ruby Blocks, Procs and Lambdas blocks,Procs和lambda(在编程领域被称为闭包)是Ruby中很强大的特性,也是最容易引 ...
- 理解Ruby中的作用域
作用域对于Ruby以及其它编程语言都是一个需要理解的至关重要的基础知识.在我刚开始学习ruby的时候遇到很多诸如变量未定义.变量没有正确赋值之类的问题,归根结底是因为自己对于ruby作用域的了解不够, ...
- [No000010]Ruby 中一些百分号(%)的用法小结
#Ruby 中一些百分号(%)的用法小结 #这篇文章主要介绍了Ruby 中一些百分号(%)的用法小结,需要的朋友可以参考下 what_frank_said = "Hello!"#% ...
- Ruby中 使用Builder Xml Markup 操作XML
=begin Ruby中 使用Xml Markup 轻松的对XML文档操作, 项目地址:http://builder.rubyforge.org/ 使用之前我们需要安装Builder xml mark ...
- Ruby中Block, Proc, 和Lambda
Block Blocks就是存放一些可以被执行的代码的块,通常用do...end 或者 {}表示 例如: [1, 2, 3].each do |num| puts num end [1, 2, 3]. ...
- ruby中symbol
Symbol 是什么 Ruby 是一个强大的面向对象脚本语言(本文所用 Ruby 版本为1.8.6),在 Ruby 中 Symbol 表示“名字”,比如字符串的名字,标识符的名字. 创建一个 Symb ...
- [Ruby学习总结]Ruby中的类
1.类名的定义以大写字母开头,单词首字母大写,不用"_"分隔 2.实例化对象的时候调用new方法,实际上调用的是类里边的initialize方法,是ruby类的初始化方法,功能等同 ...
随机推荐
- mysql学习【第4篇】:MySQL函数和编程
狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! mysql学习[第4篇]:MySQL函数 官方文档 : 官方文档 常用函数 分类: 数学函数 , ...
- nodejs prefix(全局)和cache(缓存)windows下设置
引:在安装完nodejs后,通过npm下载全局模块默认安装到{%USERDATA%}C:\Users\username\AppData\下的Roaming\npm下,这当然是不太对的默认. 1,安装L ...
- MonkeyRunner_批处理执行py文件
新建bat文件,使用call调用monkeyrunner执行py脚本 @echo off echo begin testcase001 %time% %date%call monkeyrunner d ...
- vue获取内存中的值并写入
<template> <div class="container"> <h3>发表评论</h3> <hr> <te ...
- 微信即将支持App直接打开小程序
“今年,微信将更快速地支持各APP直接打开小程序.”微信开放平台基础部高级产品经理林兴表示.对于官方即将支持的App直接打开小程序,林兴解释说,正如大家都喜欢微信钱包里的各种便捷服务,以后一个旅游攻略 ...
- Sql server 2016 Always On 搭建Windows集群配置
.安装WSFC群集组件 1)打开服务器管理器,选择“功能”,在右边窗口中点击“添加功能”. 2)在添加功能向导中,勾选“故障转移群集”,点击“下一步”. 3)在“确认安装选择”页面中,点击“安装”,进 ...
- Python3学习之路~6.3 类变量 VS 实例变量
类变量 VS 实例变量 #Author:Zheng Na # 实例里面可以查询.增加.删除.修改实例变量 class Role: # 类名 # 类变量 name = '我是类name' n=1 n_l ...
- 下载ez_setup
1.下载ez_setup链接:https://pypi.org/project/ez_setup/#files
- Windows平台Mysql表名变小写的解决过程
由于要弄某个项目的数据库设计文档,几百张表,如果弄在word文档里面一个个添加,效率比较低. 故分别使用了Mysql WorkBench(win版)和Powerdesigner 15来做这个设计文档. ...
- eslint 代码规范
官网:https://github.com/standard/standard/blob/master/docs/RULES-zhcn.md JavaScript Standard Style Eng ...