将字符串转换为仅在运行时已知的类型?

时间:2011-09-16 13:19:03

标签: ruby

我是Ruby的新手,所以这可能是一个愚蠢的问题。我知道,例如,如果我想将String转换为Float,我只需致电to_f

但是,如果我只知道我想在运行时转换的类型怎么办?例如,我可以编写如下内容:

klass = Float
converted = klass.from_s '10.25'

有没有找到这样的方法?显然它不适用于所有事情,但至少对于基本数字类型而言。

1 个答案:

答案 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#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