我有一个哈希:
rule => {
:quantity => 2,
:operator => ">="
}
和
@quantity = 1
使用@quantity
,rule[:operator]
和rule[:quantity]
,我想动态表达:
if @quantity rule[:operator] rule[:quantity] # SyntaxError
使其评估为:
if 1 >= 2
我该怎么做?
答案 0 :(得分:4)
Ruby中的运算符是方法的“语法糖”。
a >= b
相当于
a.>=(b)
因此,您可以使用send
或public_send
动态调用运算符作为方法。
op1 = '>='
op2 = '<'
1.send(op1, 2) # => false
1.send(op2, 2) # => true
在您的示例中,您可以像这样使用它:
if @quantity.send(rule[:operator], rule[:quantity])
答案 1 :(得分:3)
另一种方法是使用Method#method
:
@quantity.method(rule[:operator])[rule[:quantity]]