我是Ruby的新手,所以这可能是一个愚蠢的问题。我知道,例如,如果我想将String
转换为Float
,我只需致电to_f
。
但是,如果我只知道我想在运行时转换的类型怎么办?例如,我可以编写如下内容:
klass = Float
converted = klass.from_s '10.25'
有没有找到这样的方法?显然它不适用于所有事情,但至少对于基本数字类型而言。
答案 0 :(得分: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#Float
和Kernel#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