1

Rails 3中可能重复 的字符串连接

我使用 Ruby 2.0.0-p247。

+@并且当你不小心空格时-@会导致。NoMethodError

如果你把一根弦棒和+and放在一起-,你会看到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 无关。

这是关于+优先级的。有人可以解释一下+什么时候与String一起使用吗?

谢谢!

4

1 回答 1

5

Ruby 中的 +@ 和 -@ 是什么?

这些是unary plusunary minus。但是这些不是为String对象定义的,而是为Fixnum对象定义的。

请参阅以下内容:

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 回答