[英]Metaprogramming with ruby, operator overloading and instance_eval
例如,我上课像:
class QueryDSL
def initialize(&block)
instance_eval &block
end
def ==(value)
"bla bla '#{value}'"
end
def test(param)
param + param
end
end
和类查询,如:
class Query
def self.where(&block)
QueryDSL.new(&block)
end
end
我怀疑何时执行:
Query.where{test == 9}
输出应为:
"bla bla 9 bla bla 9"
但是我有像这样的异常:
`test': wrong number of arguments (0 for 1) (ArgumentError)
我的代码有什么错误吗? 谢谢
您的问题是,当定义为采用一个参数时,您正在调用不带参数的QueryDSL#test
方法,因此
`test': wrong number of arguments (0 for 1) (ArgumentError)
错误。
更改test
方法以不接受参数,或者为param
设置默认值,或者在块中提供参数:
Query.where { test(6) == 9 }
尽管这仍然不会调用您的==
运算符,但是test
不会返回QueryDSL实例,因此将使用==
运算符返回所返回的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.