Techioz Blog

Rubyで数式文字列を実行する最良の方法は?

概要

このサンプル文字列のような文字列内の数式を実行したいと考えています。

そして、 true または false を返す if exec_string(A) のような関数が必要です。

現在、私はこの方法を使用しています:

    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 

これでは多くのケースを処理できませんでした。何か助けはありますか?

解決策

それには eval を使用できます。

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

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

警告: eval の使用は危険であることに注意してください。特に、評価される文字列がユーザーによって提供される場合はそうです。ユーザーが単純な数値比較ではなく、ファイルを削除するコマンドを渡した場合に何が起こるかを想像してみてください。