2013-03-30 33 views
2

在Ruby中,如果我設置的變量:Ruby - 如何評估兩個數字和一個運算符?

1.9.3-p327 :002 > a=20;b=5;c="-" 

我怎麼能那麼做的 「ABC」,並使其返回15

我想這

class Dummy < Object 
    def self.calc(a,b,operation) 
    return eval(a,operation,b) 
    end 
end 

1.9.3-p327 :006 > Dummy.calc(a,b,c) 

,但我得到

TypeError: can't convert Fixnum into String 
    from (irb):6:in `eval' 

回答

6

從技術上講,做你想做的事的方式是eval "#{a}#{c}#{b}"這個插值所有變量轉換成字符串。

但是,我不明白爲什麼你會使用eval這個。由於-是所有Numeric類的一種方法,因此如果您想執行a - b,則只需執行a.send(c, b)即可。

+0

+1爲a.send(c,b) –

+1

事實上,使用eval完全是一個非常糟糕的主意。而不是發送,如果它在網絡上(想想有人在寫1,:instance_eval,'system(\'rm -rf /''''')+1。 – Linuxios

+0

是的,這兩個工作都是簡化的片段,所以不會造成太大的影響感覺孤立,但試圖得到的原則,你的答案表明。 –