Undefined method '+@'

ruby

Solution

Good question! In ruby, the `+@` method defines the behavior of the unary + operator. In other words, it defines what happens when you have an expression like `+someSymbol`.

So, in this case, it's seeing the part of your expression, `+" #{base} "` and trying to apply the unary + method to the string, which doesn't exist.

Try adding a space between the `+` and the start of your string.

What's also interesting is that this only happens in some cases.

i = 2
i.to_s +"foo" # => NoMethodError: undefined method `+@` for "foo":String
"2" +"foo"    # => "2foo"

So what's going on? `i.to_s +"foo"` is equivalent to `i.to_s(+"foo")`. And now you can see why the unary + function is being called and not the string concatenation operator.

So, you have other options to fix your code:

i.to_s() +" #{base} " + i.to_s

or even

"#{i} #{base} #{i}"

Problem

I can't understand why this is not working; all three elements should be strings. ``` i = 5 base = "somestring" base = i.to_s +" #{base} " + i.to_s # => Undefined method '+@' ``` Why does it interpret it as a method? I thought maybe it has something to do with setting `base` equal to a part of itself, but this seems to work: ``` base = "#{base}" ```

Original source