Вопрос по ruby – Что означает «<< -» в Ruby?

28

Например:

<code>code = <<-EOH
    bundle install
    bundle exec unicorn -c /etc/unicorn.cfg -D
EOH
</code>

Что делает этот код? Что такое<<- называется?

Symbolhound - это один из способов поиска синтаксиса, который не может обработать Google. Andrew Grimm

Ваш Ответ

4   ответа
37

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

Узнать большеВот, например.

Часто вы используете heredoc для определения больших кусков кода.Немного Редакторы знают об этом и могут выделить синтаксис для вас (если вы укажете язык). Посмотрите:

strings vs heredocs

Error: User Rate Limit Exceeded
-1

Вы можете передать несколько команд в одном блоке, как это в рецепте шеф-повара

   bash 'Install ftppwd' do
    code <<-EOH
   mkdir #{ftppwd_dir}
   chmod 775 #{ftppwd_dir}
   chgrp #{batch_id} #{ftppwd_dir}/*
   chown #{batch_id} #{ftppwd_dir}/*
   EOH
2

Похоже на меня, как heredoc.- позволяет конечному разделителю игнорировать пробелы перед ним.

Простой поиск в Google дал мнеэтот.

Я никогда не слышал о heredoc, поэтому Google был бесплодным. Иногда сложно присвоить имена неизвестным символам
<<-END в bash / shell удалит предшествующий пробел, но в Ruby это не так просто, см. мой ответ с изменениями в 2.3.x, которые привели к некоторому паритету функциональности при одновременном требовании нового синтаксиса.
Heredocswould быть болью в Google. Концепция и реализация являются странными, если вы никогда не сталкивались с ними раньше.
2

Существует также более новый синтаксис HEREDOC для Ruby.<<~END это больше похоже на то, что вы обычно видите в большинстве оболочек и других языках с~ вместо- сказать Ruby обрезать начальные пробелы, чтобы они соответствовали наименьшей строке в блоке.

https://infinum.co/the-capsized-eight/multiline-strings-ruby-2-3-0-the-squiggly-heredoc

Ох, пропустил это.

Похожие вопросы