想自己实现一个小型的 DSL,绑定变量后,让表达式返回布尔值,比如:
a.foo > a.bar
如何让如上表达式在a.foo
与a.bar
只要一个为 nil,就返回 true?
对于a.foo
为 nil 的情况,我是这样实现的:
class NilClass
methods = [:>, :<, :>=, :<=, :==, :!=]
methods.each do |method|
define_method method do |arg|
return true
end
end
end
对于a.foo
不为 nil(a.foo
可以是任何数据类型),但是a.bar
为 nil 的情况,如何实现呢?