Хороший вопрос! В рубине метод [email protected]
определяет поведение унарного оператора +. Другими словами, он определяет, что происходит, когда у вас есть выражение типа +someSymbol
.
Итак, в этом случае он видит часть вашего выражения, +" #{base} "
и пытается применить метод унарного + к строке, которая не существует.
Попробуйте добавить пробел между +
и началом вашей строки.
Интересно также, что это происходит только в некоторых случаях.
i = 2
i.to_s +"foo" # => NoMethodError: undefined method `[email protected]` for "foo":String
"2" +"foo" # => "2foo"
Так что же происходит? i.to_s +"foo"
эквивалентно i.to_s(+"foo")
. И теперь вы можете понять, почему вызывается функция унарного +, а не оператор конкатенации строк.
Итак, у вас есть другие варианты, чтобы исправить код:
i.to_s() +" #{base} " + i.to_s
или даже
"#{i} #{base} #{i}"
Вам нужно пространство между '+' и '" 'в вашей третьей строке –
Wow, потрясающая благодарность Это небольшая деталь. Я думал, что интервал не имеет значения в Ruby? –
Интервал имеет значение в Ruby. Рассмотрим разницу между 'f (x, y)' и 'f (x, y) 'для другого примера. –