これをもう少し良くする方法はありますか?
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'
たとえば、連結を暗示する方法はありますか?
この回答には、必要なもの(余分な空白なしの簡単な複数行の連結)を得るのに役立つ部分がありますが、実際の回答にはそれが含まれていなかったため、ここにまとめます。
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"