有没有办法让这看起来更好一点?
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)。否则,缩进空格会导致标识符被解释为字符串的延续。
END_SQL
p <<-END_SQL
p <<END_SQL
这并没有节省多少打字,但对我来说,它看起来比使用 + 号更好。
另外(我在几年后的编辑中说),如果您使用的是 Ruby 2.3+,则运算符 <<~也可用,它会从最终字符串中删除额外的缩进。在这种情况下,您应该能够删除.gsub调用(尽管它可能取决于起始缩进和您的最终需求)。
.gsub
编辑:再添加一个:
p %{ SELECT * FROM users ORDER BY users.id DESC }.gsub(/\s+/, " ").strip # >> "SELECT * FROM users ORDER BY users.id DESC"