Недавно я понял, что если вы сопоставляете последовательность строковых литералов Ruby (например, 'a' "b" 'c'
), это эквивалентно конкатенации этих строковых литералов. Однако я не могу найти эту языковую функцию, документально зафиксированную где угодно. Я искал использование терминов "сопоставление" и "конкатенация", но только нашел ссылку на него в нескольких ответах StackOverflow. Может ли кто-нибудь указать мне окончательную ссылку?
Где официально документирована функция параллельного сопоставления строк Ruby?
Ответ 1
UPDATE
Это теперь официально документировано в RDoc, который поставляется с Ruby.
Изменения будут распространяться на RubyDoc при следующем создании документации.
Добавленная документация:
Adjacent string literals are automatically concatenated by the interpreter:
"con" "cat" "en" "at" "ion" #=> "concatenation"
"This string contains "\
"no newlines." #=> "This string contains no newlines."
Any combination of adjacent single-quote, double-quote, percent strings will
be concatenated as long as a percent-string is not last.
%q{a} 'b' "c" #=> "abc"
"a" 'b' %q{c} #=> NameError: uninitialized constant q
ORIGINAL
Прямо сейчас, это нигде в официальной рубинской документации, но я думаю, что это должно быть. Как отмечено в комментарии, логичным местом для документов должно быть: http://www.ruby-doc.org/core-2.0/doc/syntax/literals_rdoc.html#label-Strings
Я открыл запрос на перенос на ruby/ruby с добавленной документацией.
Если этот запрос на растяжение будет объединен, он автоматически обновит http://www.ruby-doc.org. Я обновлю это сообщение, если/когда это произойдет. ^ _ ^
Единственные другие упоминания об этом, которые я нашел в Интернете:
- Язык программирования Ruby, стр. 47 (упомянутый в другом ответе)
- Сообщение о Ruby Forum за 2008 год
- Программирование Ruby
Ответ 2
Существует ссылка в Язык программирования Ruby, страница 47.
Похоже, что это преднамеренно в синтаксическом анализаторе, в ситуациях, когда вы хотите разделить строковые литералы в коде, но не хотите платить цену за их объединение (и создание 3 или более строк). Хороший пример
- длинные строки без разрывов строк и без обязательного кода перебора строк.text = "This is a long example message without line breaks. " \
"If it were not for this handy syntax, " \
"I would need to concatenate many strings, " \
"or find some other work-around"
Ответ 3
В дополнение к ссылка на кирку, есть несколько unit tests:
# compile time string concatenation
assert_equal("abcd", "ab" "cd")
assert_equal("22aacd44", "#{22}aa" "cd#{44}")
assert_equal("22aacd445566", "#{22}aa" "cd#{44}" "55" "#{66}")
Ответ 4
Если вы хотите o сломать длинный одноцилинговый строковый литерал на нескольких строках, не вставляя в него новую строку.
Просто разбить его на несколько смежных строковых литералов, интерпретатор ruby будет конкатенировать их во время процесса синтаксического анализа.
str = "hello" "all"
puts str #=> helloall
помните, что вы должны избегать строк новой строки между литералами, чтобы ruby не интерпретировал новую строку как терминатор оператора.
str = "hello" \
" all" \
" how are you."
puts str #=> hello all how are you