これをもう少し良く見せる方法はありますか?
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_SQL
p <<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"