Где официально документирована функция параллельного сопоставления строк Ruby?

Недавно я понял, что если вы сопоставляете последовательность строковых литералов Ruby (например, 'a' "b" 'c'), это эквивалентно конкатенации этих строковых литералов. Однако я не могу найти эту языковую функцию, документально зафиксированную где угодно. Я искал использование терминов "сопоставление" и "конкатенация", но только нашел ссылку на него в нескольких ответах StackOverflow. Может ли кто-нибудь указать мне окончательную ссылку?

Ответ 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. Я обновлю это сообщение, если/когда это произойдет. ^ _ ^

Единственные другие упоминания об этом, которые я нашел в Интернете:

Ответ 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