【问题标题】:Converting a string to a condition in Ruby将字符串转换为 Ruby 中的条件
【发布时间】:2011-06-30 14:43:17
【问题描述】:

我实际上有一个名为“cond”的字符串。这是该字符串的内容:

"20 < 50"

我想将它插入到这样的条件中:(示例)

if 20 < 50
return "Hello"

但是那个条件是一个字符串,所以我不能这样写:

if cond
return "Hello"

所以我想知道是否可以将字符串转换为条件以设置为“if”条件。如果可能的话,我该怎么做?

谢谢。

【问题讨论】:

  • 使用 eval 会起作用,但我想有更好的方法来做到这一点 - 但是更好的方法可能在于您的程序的整体结构。

标签: ruby string boolean conditional-statements


【解决方案1】:

eval 可能只是你的朋友:

>> eval('20 < 50')
=> true

但是,eval 将执行其参数中的任意代码;你应该确保你的cond 不能包含任何对你的系统健康有害的东西!

【讨论】:

    【解决方案2】:

    使用 eval 的另一种方法可能是编写一个评估器(或使用/修改现有的评估器,例如 this one by Sterling Camden)。

    因为他的代码要求你写 lt、gt、eq 等,而不是 、==、...。正如 calc.rb 中的评论所述:

    # Equality and its clan (note we cannot use '==' or other two-character
    # non-word operators, because of the way we parse the string.  Non-word
    # characters come in one at a time.
    

    【讨论】:

      【解决方案3】:

      如果您知道条件始终是基本的,就像您提供的示例一样,您可以这样做:

      left, op, right = "20 < 50".split
      cond = left.to_i.send(op.to_sym, right.to_i)
      

      【讨论】:

        猜你喜欢
        • 2011-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-26
        • 1970-01-01
        • 2011-10-04
        • 2010-09-06
        相关资源
        最近更新 更多