有没有办法让这个看起来好一点?
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 语法的版本(来自这个链接 http://graysoftinc.com/ruby-voodoo/working-with-multiline-strings):
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
在这种情况下调用(尽管它可能取决于起始缩进和您的最终需求)。
编辑:再添加一个:
p %{
SELECT * FROM users
ORDER BY users.id DESC
}.gsub(/\s+/, " ").strip
# >> "SELECT * FROM users ORDER BY users.id DESC"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)