2011-09-16 8 views
0

これは愚かな質問かもしれないので、私はRubyを初めて使っています。たとえば、StringFloatに変換する場合は、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

関連する問題