2012-09-26 8 views
5

このRubyコード:未定義のメソッド ` - 」 "100" のために:文字列

income = "100" 
bills = "52" 

puts income - bills 

がエラーを投げた:

./to_f.rb:6: undefined method `-' for "100":String (NoMethodError) 

Rubyは自動変換されません数値に文字列を上の演算操作を実行するときそれら?

答えて

13

Rubyはdynamically-typedstrictly-typed(または「強く型付けされた」であります)言語。ルアは別のそのような言語です。前者は、変数が任意のクラスのクラスを保持できることを意味します。後者は、あなたが実行しているものです。つまり、タイプ強制が自動的には起こらないことを意味します。

これはJavaScriptと動的に型付けされており、はゆるく型付けされていますと対照的です。 JavaScriptではvar x = [] + false;と書くことができ、となります。別の例として、JavaScript "1" + 1 == "11"ではなく"1" - 1 == 0です。 Rubyはそのようなことをしません。あなたが必要とする、あなたのケースで

puts income.to_i - bills.to_i 

なお-ためのRuby-各クラスで最もoperators are implemented as methodsは、オペレータが、様々なタイプのオペランドをどのように処理するかを選択することができます。たとえば、

ほとんどの場合、コアライブラリはそれほど巧妙ではありません。

+0

私の答えよりもはるかに優れています!ありがとう、Phrogz。 –

6

+演算子を使用して文字列を連結することができるので、数値値を保持する2つの文字列を追加するか合計するかは必ずしも明確ではありません。

あなたが番号を保持している2つの文字列を持っている場合は、それらに任意の計算を実行する前に適切な値(int型やfloat型)に変換:

income = "100" 
bills = "52" 

puts income.to_f - bills.to_f 
関連する問題