在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
先来看别名,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 (注意这也方法别名的不同) 再来说说方法取消: 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方法 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论