Ruby: 連結せずに複数行の文字列を書くことはできますか? 質問する

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'

たとえば、連結を暗示する方法はありますか?

ベストアンサー1

この回答には、私が必要としていたもの (余分な空白のない簡単な複数行の連結) を取得するのに役立つ部分がありますが、実際の回答にはそれが含まれていなかったため、ここでまとめています。

str = 'this is a multi-line string'\
  ' using implicit concatenation'\
  ' to prevent spare \n\'s'

=> "this is a multi-line string using implicit concatenation to eliminate spare
\\n's"

ボーナスとして、面白いHEREDOC構文を使ったバージョンがあります(このリンク):

p <<END_SQL.gsub(/\s+/, " ").strip
SELECT * FROM     users
         ORDER BY users.id DESC
END_SQL
# >> "SELECT * FROM users ORDER BY users.id DESC"

後者は、主に処理に柔軟性が必要な状況で使用されます。個人的には好きではありません。処理が文字列に対して奇妙な場所に置かれるからです (つまり、文字列の前にあるが、通常は後から来るインスタンス メソッドを使用する)。ただし、これは存在します。最後の識別子をインデントする場合(関数またはモジュール内にある可能性が高いため、一般的です)、ハイフンで区切った構文 (つまり、ではなく)END_SQLを使用する必要があることに注意してください。そうしないと、インデントの空白によって、識別子が文字列の継続として解釈されます。p <<-END_SQLp <<END_SQL

これによって入力の手間が省けるわけではありませんが、私にとっては + 記号を使用するよりも見栄えが良いです。

また(数年後の編集で言いますが)、Ruby 2.3以降を使用している場合、演算子<<~もご利用いただけます.gsubは、最終文字列から余分なインデントを削除します。その場合、呼び出しを削除できるはずです(ただし、開始インデントと最終的なニーズの両方に依存する可能性があります)。

編集: もう1つ追加:

p %{
SELECT * FROM     users
         ORDER BY users.id DESC
}.gsub(/\s+/, " ").strip
# >> "SELECT * FROM users ORDER BY users.id DESC"

おすすめ記事