我有这个问题,我不能在块内使用重载运算符,而不是使用重载运算符,它使用 ruby 默认运算符并返回:
ArgumentError: comparison of String with 25 failed
用例将允许该类用作:
Query.where { age > 25 }
作为一个通知,别管method_missing
下面的方法,它这个上下文,它只用于抛出上面提到的错误消息的目的,这里的代码如下所示:
class Query
class << self
def > arg
"> #{arg.to_s}"
end
def method_missing meth, *args, &block
"#{meth.to_s} #{args.first.to_s}"
end
def where &block
"SELECT * FROM table WHERE #{class_eval &block}"
end
end
end
如果我self
在块内添加,重载运算符运行良好:
Query.where { age self > 25 }
=> "SELECT * FROM table WHERE age > 25"
取出self
,它返回此错误:
Query.where { age > 25 }
=> ArgumentError: comparison of String with 25 failed