在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
如果说哪门语言对我影响最大,那就是Ruby了,在.NET阵营多年,试图去用C#的思维去解释很多东西,当然解释Java是足够了,可惜我也用了好几年去解释Javascript,结果是可想而知的:解释不通。直到我遇到Ruby,这让我了解到一件事:不能用一种语言的思维去解释另外一种语言,当然某些局部特点是有可比性的。 本文重点解释一下Ruby的对象模型(可以理解我Javascript的原型模型),有此可以看出Ruby的完美和统一。 对象模型无图无真相基本规则
代码示例1 # coding: utf-8 2 3 class Parent 4 def hi() 5 puts "hi" 6 end 7 end 8 9 module Mixinable 10 def hey() 11 puts "hey" 12 end 13 end 14 15 class Child < Parent 16 include Mixinable 17 18 def hello() 19 puts "hello" 20 end 21 end 22 23 instance = Child.new 24 instance.hello 25 instance.hey 26 instance.hi 如何修改Singleton Class?第一种方式 1 class << instance 2 def instance_singleton_method_one 3 puts "instance_singleton_method_one" 4 end 5 end 6 7 instance.instance_singleton_method_one 第二种形式 1 def instance.instance_singleton_method_two 2 puts "instance_singleton_method_two" 3 end 4 5 instance.instance_singleton_method_two 如何修改类型,如Child?注意:下面演示的是“Open Class”,不是重新定义一个类型。 1 class Child 2 def child_method_one() 3 puts "child_method_one" 4 end 5 end 6 7 instance.child_method_one 类型方法是特殊的实例方法,这些方法定义在类型的Singleton Class中。第一种方式 1 class Child 2 def Child.child_class_method_one() 3 puts "child_class_method_one" 4 end 5 end 6 7 Child.child_class_method_one 第二种形式 1 class Child 2 def self.child_class_method_two() 3 puts "child_class_method_two" 4 end 5 end 6 7 Child.child_class_method_two 第三种形式 1 def Child.child_class_method_three 2 puts "child_class_method_three" 3 end 4 5 Child.child_class_method_three 第四种形式 1 class << Child 2 def child_class_method_four() 3 puts "child_class_method_four" 4 end 5 end 6 7 Child.child_class_method_four 备注图中很多关系有兴趣的朋友可以自己验证,本文没有涉及元编程,元编程不过是按照一定的元数据来修改类型定义或生成类型定义,也就是说元编程的前提是类型可以动态的修改,了解了本文,元编程不在话下。
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论