ruby元编程
14 March 2015
前言
看完一遍《Ruby元编程》的第一部分,从买回来到今天快半年了,断断续续的看了一段时间。搞了一圈,最近又回到Ruby和Rails,花了点时间,细看了一下,感觉写的还是挺好,很多知识都讲的相当透彻。
Ruby方面,语法上很不熟,遇到问题主要靠搜和猜,就这样也工作了大半年,从长远看来,基础知识的缺乏始终短板,故下决心好好学习学习。
正文
敲了一遍某个复杂的例子,这里介绍的知识就是关于过滤器属性访问器等类宏的实现方法。
# 类扩展混入的例子
module MyMixin
def self.included(base) # 使用Module#included钩子方法
base.extend ClassMethods
end
def test # 这是类的实例方法
# do sth
end
# 定义了内部模块,用来混入类宏
module ClassMethods
def attr_checked(attr, &validation)
define_method "#{attr}=" do |value|
raise 'Invalid attribute' unless validation.call(value)
instance_varible_set("@#{attr}", value)
end
define_method attr do
instance_variable_get "@#{attr}"
end
end
end
end
class T; include MyMixin; end
这里的混入,其实是将方法定义到类eigenclass中了,从而成为了类的方法。
后记
Ruby方面,语法上很不熟,遇到问题主要靠搜和猜,就这样也工作了大半年,从长远看来,基础知识的缺乏始终短板,故下决心好好学习学习。
傲娇的使用Disqus