元编程
- 用Ruby自定义语法
-
动态地改变类
- 既便于解释器,又便于人类阅读理解。
开放类
在某个类名上首次调用class
会定义一个类;但如果该类已经定义过,再调用class
会修改先前的类的定义,比如添加方法。因为有随时重定义任何类或对象的自由,所以称为开放类。这种写法让代码实现简单易懂。
blank.rb
% ruby blank.rb
person
这样,不论是nil
还是""
,因为两个类都具有blank?
方法,就可以用相同的方式判断是否空字符串(鸭子类型)。
units.rb
把各种单位转成英寸:
% ruby units.rb
24
24
24
-633600
使用method_missing
调用的方法找不到时,Ruby会调用method_missing
方法。通过覆盖这个方法,可以把输入的方法名称作为参数,实现特殊的功能。但这时需要另外处理未知的方法名称,保证严格的错误检查。
roman.rb
10
90
12
NoMethodError
模块
比如要读取一个 csv
表格:
直接用类实现
acts_as_csv_class.rb
用宏实现
通过宏中的方法调用define_method
添加这组方法:
acts_as_csv.rb
用模块实现:
acts_as_csv_module.rb
- 只要某个模块被另一模块包含,Ruby就会调用该模块的
included
方法。
类是可以被实例化的模块。
-
调用该模块的类,在模块中记为
base
。 - 通过
extend
添加类方法 - 通过
include
添加实例方法
第三天自习
acts_as_csv_module_csvrow.rb
打印指定元素。
本站文章除注明转载/出处外由 wguosh 创作,均为本站原创或翻译,采用 知识共享署名4.0 国际许可协议进行许可
转载前请务必署名
最后编辑时间为:2021-04-03 20:26:00