2011-09-16 35 views
0

我是Ruby的新手,所以這可能是一個愚蠢的問題。我知道,例如,如果我想將String轉換爲Float,我可以簡單地撥打to_f將字符串轉換爲僅在運行時已知的類型?

但是,如果我只知道我想在運行時轉換的類型呢?所以例如,我可以寫下類似的東西:

klass = Float 
converted = klass.from_s '10.25' 

有沒有這樣的方法,我只是沒有找到?顯然它不適用於任何事情,但至少對於基本的數字類型。

回答

3

既然你只是想介紹一些基本的數字類型,這會工作:

conversions = { Float => :to_f, Fixnum => :to_i } 
klass = Float 
converted = '10.25'.send(conversions[klass]) #=> 10.25 
klass = Fixnum 
converted = '10.25'.send(conversions[klass]) #=> 10 

正在使用Kernel#FloatKernel#Integer方法,像這樣的作品的另一件事:

>> send(klass.to_s.intern, '10.25') 
=> 10.25 
>> klass = Integer 
=> Integer 
>> send(klass.to_s.intern, '10.25') 
ArgumentError: invalid value for Integer: "10.25" 
    from (irb):25:in `Integer' 
    from (irb):25:in `send' 
    from (irb):25 
    from :0 
>> send(klass.to_s.intern, '10') 
=> 10 
+0

感謝您的 - 我選擇了第一個選項,因爲我希望在試圖轉換爲Integer而不是拋出錯誤時丟失小數位。 – Russell

相關問題