在ruby中执行数学表达式字符串的最佳方法?

时间:2015-11-05 10:58:18

标签: ruby

我想执行数学表达式,就像这个样本字符串一样。

  1. var offsetRequired = (e.offsetX || e.pageX - $(e.target).offset().left);
  2. A = "23>=34"
  3. B = "77<90"
  4. 我希望像C = "33>77"这样的函数返回true或false。

    目前我正在使用此方法

    if exec_string(A)

    无法处理很多案件。有什么帮助吗?

3 个答案:

答案 0 :(得分:5)

您可以使用eval

eval("23>=34")
#=> false
eval("23<=34")
#=> true

但请记住,eval可能是邪恶的。特别是如果评估的字符串是由用户提供的。想象一下,如果用户输入删除文件的命令会发生什么......

答案 1 :(得分:1)

您可以使用Object#send执行此操作

  

调用symbol标识的方法,并将指定的参数传递给它。

def self.calc(L, cmpr, R)      
    left = L.to_i
    right = R.to_i
    operator = cmpr.to_sym
    left.send(operator, right)
end 

例如,

irb(main):001:0> 5.send(:+, 7)
=> 12
irb(main):002:0> 3.send(:>=, 5)
=> false
irb(main):003:0> 5.send(:>=, 2)
=> true
irb(main):004:0> 12.send(:-, 3)
=> 9

答案 2 :(得分:0)

我将尝试将eval与确保不存在字母的正则表达式结合使用(例如,/[\d\.\+\s]+/,因为我唯一需要的操作是加法)。这样,仅使用数字和运算符,就无法实例化任何类或调用非数字方法。