如何动态应用运算符

时间:2016-01-12 00:32:11

标签: ruby

我有一个哈希:

rule => {
  :quantity => 2,
  :operator => ">="
}

@quantity = 1

使用@quantityrule[:operator]rule[:quantity],我想动态表达:

if @quantity rule[:operator] rule[:quantity] # SyntaxError

使其评估为:

if 1 >= 2

我该怎么做?

2 个答案:

答案 0 :(得分:4)

Ruby中的运算符是方法的“语法糖”。

a >= b

相当于

a.>=(b)

因此,您可以使用sendpublic_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]]