只今Ruby勉強中

プログラミングRuby―達人プログラマーガイド

うさぎさんと一緒にRubyの勉強をしているオレの記録。

間違ってる所とかいっぱいあると思いますけど、誰でもコメント出来るので気軽に教えて下さい。

普段は 鷹の島 って所で書いてます。

現在のハマリポイント - yield, succ?, Proc & 後で

2008-01-12 (Sat)

バグ? 23:05  バグ? - 只今Ruby勉強中 を含むブックマーク

#to_s しながら、後ろに+"とかくっつけるて書くとSyntax Errorになる。

irb(main):001:0> n = 123
=> 123
irb(main):002:0> puts "hoge" + n.to_s + "fuga"
hoge123fuga
=> nil
irb(main):003:0> puts "hoge" + n.to_s +"fuga"
SyntaxError: compile error
(irb):3: syntax error, unexpected tUPLUS, expecting $end
puts "hoge" + n.to_s +"fuga"
                      ^
        from (irb):3
        from :0

to_s しなければ平気

irb(main):004:0> str = "hehe"
=> "hehe"
irb(main):005:0> puts "hoge" + str +"fuga"
hogehehefuga
=> nil

to_s するとやっぱりなる。

irb(main):007:0> puts "hoge" + str.to_s +"fuga"
SyntaxError: compile error
(irb):7: syntax error, unexpected tUPLUS, expecting $end
puts "hoge" + str.to_s +"fuga"
                        ^
        from (irb):7
        from :0

なんでだろう。

rubikitchrubikitch2008/01/13 13:53「+"fuga"」 ではなくて「 + "fuga"」 にしましょう。「+"fuga"」は"fuga"に単項+演算子が適用されています。

TaGaTaGa2008/01/14 01:34print "hoge",n.to_s,"fuga"
ではどうでしょう.バグというより仕様ですね.

gabagaba2008/01/14 16:42ありがとうございます。

例えば
"hoge" + (str.to_s) +("hoge")
は通りますけど
"hoge" + str.to_s +("hoge")
だとダメなんです。
これも同じ理由なんでしょうか?

TagaTaga2008/01/17 23:24たしかにすっきりしないですね.
単項+演算子の適用なら,+@メソッドがStringクラスにないので,
NoMethodError: undefined method `+@' for "fuga":String
のようなエラーがでそうなものですが.

gabagaba2008/01/22 23:41どうやらこれと同じっぽいです。
http://www.ruby-forum.com/topic/109823#541735

irb(main):001:0> 1 + 123.to_i +123
SyntaxError: compile error
(irb):1: syntax error, unexpected tINTEGER, expecting $end
from (irb):1
from :0
irb(main):002:0> 1 + 123 +123
=> 247

トラックバック - http://rubyist.g.hatena.ne.jp/gaba/20080112