Ruby: я могу записать многострочную строку без конкатенации?

Существует ли способ сделать этот взгляд немного лучше?

conn.exec 'select attr1, attr2, attr3, attr4, attr5, attr6, attr7 ' +
          'from table1, table2, table3, etc, etc, etc, etc, etc, ' +
          'where etc etc etc etc etc etc etc etc etc etc etc etc etc'

Как, там способ подразумевать конкатенацию?

372
задан derobert 12 February 2012 в 22:18
поделиться

5 ответов

Как вы уже читали, для многострочных строк существует несколько синтаксисов. Мне больше всего нравится стиль Perl:

conn.exec %q{select attr1, attr2, attr3, attr4, attr5, attr6, attr7
      from table1, table2, table3, etc, etc, etc, etc, etc,
      where etc etc etc etc etc etc etc etc etc etc etc etc etc}

Многострочная строка начинается с% q, за которым следует {, [или (, а затем заканчивается соответствующим перевернутым символом.% Q не допускает интерполяцию;% Q делает так, что вы могут писать такие вещи:

conn.exec %Q{select attr1, attr2, attr3, attr4, attr5, attr6, attr7
      from #{table_names},
      where etc etc etc etc etc etc etc etc etc etc etc etc etc}

На самом деле я понятия не имею, как называются эти типы многострочных строк, поэтому давайте просто назовем их Perl Multilines.

Однако обратите внимание, используете ли вы Perl Multilines или heredocs, как у Марка и Питера предложено, вы получите потенциально ненужные пробелы. Как в моих примерах, так и в их примерах, строки "from" и "where" содержат ведущие пробелы из-за их отступа в коде. Если этот пробел нежелателен, вы должны использовать конкатенированные строки, как вы это делаете сейчас.

51
ответ дан 23 November 2019 в 00:01
поделиться

О да codeigniter хороший, а также имеет поддержку для многих библиотек, пожалуйста, посмотрите здесь http://www.haughin.com/code/ Включите службу Amazon, например $ this- > load- > library ('s3');

-121--1492378-

Можно использовать генератор кода для создания вариантов кода с помощью шаблона. В этом случае источник Java является продуктом генератора, а реальный код - шаблоном.

-121--880937-
conn.exec [
  "select attr1, attr2, attr3, ...",
  "from table1, table2, table3, ...",
  "where ..."
].join(' ')

Это предложение имеет преимущество перед здесь-документами и длинными последовательностями, что автоинденторы могут соответствующим образом отступить каждую часть последовательности. Но это происходит за счет эффективности.

3
ответ дан 23 November 2019 в 00:01
поделиться
conn.exec = <<eos
  select attr1, attr2, attr3, attr4, attr5, attr6, attr7
  from table1, table2, table3, etc, etc, etc, etc, etc,
  where etc etc etc etc etc etc etc etc etc etc etc etc etc
eos
16
ответ дан 23 November 2019 в 00:01
поделиться

Да, если вы не возражаете против вставки дополнительных новых строк:

 conn.exec 'select attr1, attr2, attr3, attr4, attr5, attr6, attr7
            from table1, table2, table3, etc, etc, etc, etc, etc,
            where etc etc etc etc etc etc etc etc etc etc etc etc etc'

В качестве альтернативы вы можете использовать heredoc:

conn.exec <<-eos
   select attr1, attr2, attr3, attr4, attr5, attr6, attr7
   from table1, table2, table3, etc, etc, etc, etc, etc,
   where etc etc etc etc etc etc etc etc etc etc etc etc etc
eos
165
ответ дан 23 November 2019 в 00:01
поделиться
conn.exec 'select attr1, attr2, attr3, attr4, attr5, attr6, attr7 ' <<
        'from table1, table2, table3, etc, etc, etc, etc, etc, ' <<
        'where etc etc etc etc etc etc etc etc etc etc etc etc etc'

<< является оператором конкатенации для строк

7
ответ дан 23 November 2019 в 00:01
поделиться
Другие вопросы по тегам:

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