ruby学习笔记(9)-别名(alias)与方法取消(undef,remove_method)
时间:2022-04-23
本文章向大家介绍ruby学习笔记(9)-别名(alias)与方法取消(undef,remove_method),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
先来看别名,ruby中可以给方法或全局变量起一个别名,有意思的是:方法别名定义后,即使对应的方法在后面的代码中重新定义(即修改内部实现)后,别名仍然可以调用到修改前的方法,而全局变量则不行。
def meth
puts "This is meth"
end
alias:orgin_meth:meth
meth #=> This is meth
orgin_meth #=>This is meth
def meth
puts "a new meth"
end
meth #=> a new meth
orgin_meth #=> This is meth (注意这里仍保留老方式的特性)
$a = 1
alias $b $a #将全局变量a,另取个别名b
$b = 2
p $a,$b #=> 2,2 (注意这也方法别名的不同)
再来说说方法取消: 利用undef或undef_method,可以将类的方法取消定义(也可以理解为彻底删除掉),这没什么不好理解,但要注意的是:如果一个类继承自父类,并且又定义了与父类同名的方法,用undef取消该方法后,将连带父类的同名方法一起取消(其实也很正常:动态语言世界里,子类重定义了父类继承得来的重名方法,相当于覆写了该方法,所以子类实例调用时也只能调用到子类自身的同名方法,一旦取消后,该方法[不管是父类的,还是子类的]将与子类再无任何牵挂)
class Base
def meth
puts "Base.meth"
end
end
class SubClass1 < Base
def meth #相当于重写了父类的meth方法
puts "SubClass1.meth"
end
def meth2
puts "SubClass1.meth2"
end
end
s1 = SubClass1.new
s1.meth #=>SubClass1.meth
s1.meth2 #=>SubClass1.meth2
class SubClass1
undef:meth2
#undef_method(:meth2) #这句话与上面的等效
undef:meth # 注意这里:取消meth的定义后,连父类继承的meth也将无法调用
end
#s1.meth #将报错
如果我们只想取消子类中的方法,而保留父类继承得来的同名方法,怎么办?答案就是:remove_method,把上一段代码的最后部分改成:
class SubClass1
undef:meth2
#undef_method(:meth2) #这句话与上面的等效
remove_method(:meth) #仅移除子类的meth方法
end
s1.meth #=> Base.meth
可以看到,调用s1.meth时,使用的是父类的meth方法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php7下的filesize函数
- PHP-FPM 设置多pool及配置文件重写操作示例
- laravel实现登录时监听事件,添加登录用户的记录方法
- php更新cookie内容的详细方法
- php实现映射操作实例详解
- Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
- yii框架数据库关联查询操作示例
- laravel-admin的多级联动方法
- Laravel数据库读写分离配置的方法
- php给数组赋值的实例方法
- php实现分页功能的详细实例方法
- 浅谈Laravel中的三种中间件的作用
- laravel 使用auth编写登录的方法
- laravel框架 laravel-admin上传图片到oss的方法
- php实现推荐功能的简单实例