1

Rails 3 での重複の可能性がある文字列連結

Ruby 2.0.0-p247 を使用しています。

+@スペースに注意しないと-@発生NoMethodErrorします。

と で紐棒を入れる+-NoMethodError

pry> +""
NoMethodError: undefined method `+@' for "\n":String

pry> -""
NoMethodError: undefined method `-@' for "\n":String

その他のエラー例:

1.

pry> x + "\n"
NameError: undefined local variable or method `x' for main:Object
pry> x +"\n"
NoMethodError: undefined method `+@' for "\n":String

2.

pry> def x

pry> def x; 1; end

pry> x +"\n"
NoMethodError: undefined method `+@' for "\n":String

3.

pry> class X
pry>   def y
pry>     1
pry>   end
pry> end
=> nil
pry> x = X.new
=> #<X:0x00000100ce48b0>
pry> x.y +"\n"
NoMethodError: undefined method `+@' for "\n":String

と呼ばれるものがあることがわかりましたがTkVariable、これは TkVariable とは関係ありません。

これは+優先順位についてです。誰か+が文字列で使用される場合を説明できますか?

ありがとう!

4

1 に答える 1

5

Rubyの+@と-@は何ですか?

これらはunary plusandです。しかし、unary minusこれらはオブジェクトに対して定義されているのではなく、オブジェクトに対して定義されています。StringFixnum

同じことについては以下を参照してください。

2.respond_to?(:+@)
# => true
2.respond_to?(:-@)
# => true

"".respond_to?(:+@)
# => false
"".respond_to?(:-@)
# => false

+ が最初に左側と結合されない理由がわかりません。

これは、単項演算子がhigher precedence二項演算子よりも大きいためです。

class X
   def y
     "1"
   end
end
x = X.new
x.y +"b" # undefined method `+@' for "b":String (NoMethodError) <~~ A
x.y + "b" # => "1b" <~~ B

A エラーが発生した場合は定義されていませんString#+@が、B の場合は定義されています。 二項演算子です。String#+x.y +"b"+x.y + "b"+

于 2013-08-09T16:39:20.887 に答える