неожиданный TINTEGER, ожидающий $ end - PullRequest
2 голосов
/ 03 февраля 2012

Я изучаю рубин и не могу понять, в чем здесь проблема.

formatter = "%s %s %s %s"                                                       
puts formatter = % [1, 2, 3, 4]    

Результат:

ex8.rb:3: syntax error, unexpected tINTEGER, expecting $end
puts formatter = % [1, 2, 3, 4] 
                        ^

Ответы [ 3 ]

5 голосов
/ 03 февраля 2012

Вы либо a) Не нужно это = знак:

formatter = "%s %s %s %s"
puts formatter % [1, 2, 3, 4]

или b) необходимо присвоить результат formatter по-другому:

formatter = "%s %s %s %s"
puts formatter = formatter % [1, 2, 3, 4]

или

formatter = "%s %s %s %s"
formatter = formatter % [1, 2, 3, 4]
puts formatter

Прежний ответ для b присваивает результат formatter, а затем выводит результат этого присваивания, который будет справа. Я бы порекомендовал последний (и вы могли бы, конечно, сжать две верхние строки в одну строку) только потому, что он понятнее.

Edit:
Кроме того, если вы проверите код в Learn Ruby the Hard Way , они ничего не переназначают на formatter. Дело в том, что вы можете предоставить любой массив из четырех элементов через formatter %, и он будет производить текстовое содержимое этих четырех элементов. Я вижу, что это просто погружение в методы Ruby (и вы, возможно, незнакомы с printf ), но следующее эквивалентно:

puts formatter % [1, 2, 3, 4]
puts formatter.%([1, 2, 3, 4])

# And the very retro
puts sprintf(formatter, 1, 2, 3, 4)

Другими словами, хотя у операторов есть несколько нюансов - просто немного сахара, который вы можете использовать для обозначения результата, например %=, и вам не нужно ., разделяющее объект и его метод - это всего лишь методы. Вы можете посмотреть % в документации Ruby , как и любой другой метод.

3 голосов
/ 03 февраля 2012

Не совсем понятно, что вы пытаетесь сделать. Может быть, это?

formatter = "%s %s %s %s"                                                       
puts formatter % [1, 2, 3, 4]
# >> 1 2 3 4
1 голос
/ 03 февраля 2012

Ну, они называются спецификацией формата с аргументами,

"I got the following values: %s, %d, %d and %d" % ["Tom", 2, 3, 4]
 => "I got the following values: Tom, 2, 3 and 4"
"%05d" % 123
 => "00123"

Больше вы можете найти по адресу http://ruby -doc.org / core-1.9.3 / String.html # method-i-25

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...