解決済み

Rubyの構文?言語仕様?

  • すぐに回答を!
  • 質問No.7048330
  • 閲覧数221
  • ありがとう数2
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 17% (40/226)

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 +"の時" の部分の  +"の時" という箇所が問題のようなのですが
上記箇所を + "の時" のように 文字列連結子の +と "の間に半角スペースを
入れるとうまく実行されます。
いったい原因はなんなのでしょうか?
細かい箇所ですが是非、ご教授ください。

質問者が選んだベストアンサー

  • 回答No.1

ベストアンサー率 48% (4412/9092)

単項演算子の+と見なされるためです。
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。

下記のどちらかに書法ルールを統一していれば普通は大丈夫です。
・二項演算子の前後に必ず空白を入れない
・二項演算子の前後に必ず空白を入れる
お礼コメント
1000vicki

お礼率 17% (40/226)

ありがとうございます!
理解できました。
悩んでいたのでたすかりました。
投稿日時 - 2011-10-03 20:00:55
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

ピックアップ

ページ先頭へ