首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ruby中执行数学表达式字符串的最佳方法?

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

Stack Overflow用户
提问于 2015-11-05 10:58:18
回答 3查看 2.8K关注 0票数 2

我想要执行数学表达式,它在字符串中,如下面的示例字符串:

  1. A = "23>=34"
  2. B = "77<90"
  3. C = "33>77"

我想要一些像if exec_string(A)这样的函数,它应该返回true或false。

目前,我正在使用此方法:

代码语言:javascript
复制
    rest = --- # I am splitting the string in to three(L- as left number cmpr- as compare and R- as right number )
    class_name.calc(rest[0],rest[1],rest[2])
    def self.calc(L,cmpr,R)
        case cmpr
          when "<"
            if L.to_i < R.to_i
              return true
            end
           ....
           ....
           ....
         end
    end 

处理不了很多案子。有什么帮助吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-05 11:07:12

您可以使用eval

代码语言:javascript
复制
eval("23>=34")
#=> false
eval("23<=34")
#=> true

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

票数 5
EN

Stack Overflow用户

发布于 2015-11-05 11:28:33

您可以使用Object#send来完成此操作。

调用由符号标识的方法,将指定的任何参数传递给它。

代码语言:javascript
复制
def self.calc(L, cmpr, R)      
    left = L.to_i
    right = R.to_i
    operator = cmpr.to_sym
    left.send(operator, right)
end 

例如,

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2018-08-27 17:35:57

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33542823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档