Как мне сделать позиционную замену в Ruby? - PullRequest
1 голос
/ 11 ноября 2011

Я видел в прошлом использование?персонаж, чтобы сделать это.Но я не могу найти пример в Интернете, скорее всего, потому что я не знаю, как на самом деле называется эта практика.

"? ? ?" % ['A','B','C']

дает:

"A B C"

- это то, что япытаюсь сделать.

Ответы [ 4 ]

3 голосов
/ 11 ноября 2011

Ваши вопросы не совсем понятны.Если вы просто хотите сделать printf -подобную подстановку переменных, вы можете сделать это так, как показал вам Дейв:

> "%s %s %s" % ['A', 'B', 'C']
=> "A B C"

Если вы тоже хотите возиться с позициями, вы можете сделать что-то вроде следующего:

>> "%3$s %1$s %2$s " % ['A', 'B', 'C']
=> "C A B "

или:

>> "%1$s %1$s %2$s %3$s" % ['A', 'B', 'C']
=> "A A B C"

Использование ?, которое вы помните, скорее всего, было в контексте запросов ActiveRecord.Это специфично для Rails и не работает в обычном Ruby.

3 голосов
/ 11 ноября 2011

Вам нужно использовать спецификатор формата, а не просто знак вопроса.

"%s %s %s" % ['A', 'B', 'C']

http://www.ruby -doc.org / core-1.9.3 / String.html

1 голос
/ 11 ноября 2011

Это называется строковой интерполяцией. Вы можете сделать что-то вроде:

"%s %s %s" % %w{A B C}

См. эту хорошую статью для получения дополнительной информации.

0 голосов
/ 11 ноября 2011

Лучший способ получить 'A B C' из ['A', 'B', 'C'] в Ruby - это, вероятно, ['A', 'B', 'C'].join ' '. Тем не менее, в общем случае String#% выполняет подстановку, как описано другими (со строками формата '%s'). Проверьте документы для этого метода и Kernel.sprintf.

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