例如我的课程如下:
class QueryDSL
def initialize(&block)
instance_eval &block
end
def ==(value)
"bla bla '#{value}'"
end
def test(param)
param + param
end
end
和类Query一样:
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)
我的代码有什么错误吗?感谢
答案 0 :(得分:0)
你的问题是当你被定义为接受一个参数时,你正在调用没有参数的QueryDSL#test
方法,因此
`test': wrong number of arguments (0 for 1) (ArgumentError)
错误。
更改test
方法以不接受参数或具有param
的默认值或在块中提供参数:
Query.where { test(6) == 9 }
但仍然无法调用==
运算符,test
不会返回QueryDSL实例,因此将使用==
运算符返回它返回的任何内容。