柔軟に働き方を選ぶ時代に必要なこと >>

Rubyの以下コードについて質問です。

#!/ruby/bin/ruby

print "content-type: text/html\r\n\r\n";
puts "Hello World!"
begin
def foo
x =0
(0...10).each do |value|
print value.to_s +"の時"+ x.to_s + "<br />"
end
end

foo
rescue =>e
print e.class.to_s+ "<br />"
print e.message
end


上記コードを実行すると以下のような例外を取得します
NoMethodError
undefined method `+@' for "\343\201\256\346\231\202":String
どうやら上記コードの
print value.to_s +"の時" の部分の  +"の時" という箇所が問題のようなのですが
上記箇所を + "の時" のように 文字列連結子の +と "の間に半角スペースを
入れるとうまく実行されます。
いったい原因はなんなのでしょうか?
細かい箇所ですが是非、ご教授ください。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

単項演算子の+と見なされるためです。


a = +3
みたいな。

構文としては、
print value.to_s +"の時"+ x.to_s + "<br />"
が、
print value.to_s( (+"の時")+ x.to_s + "<br />")
のように解釈されています。

メソッド呼び出しの括弧を省略できるRubyでは、曖昧な構文の時に空白をみて解釈を決めています。
print value.to_s + "の時"+ x.to_s + "<br />"
print value.to_s+"の時"+x.to_s+"<br />"
print value.to_s() +"の時"+ x.to_s() + "<br />"
ならOK。

下記のどちらかに書法ルールを統一していれば普通は大丈夫です。
・二項演算子の前後に必ず空白を入れない
・二項演算子の前後に必ず空白を入れる
    • good
    • 0
この回答へのお礼

ありがとうございます!
理解できました。
悩んでいたのでたすかりました。

お礼日時:2011/10/03 20:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング