我们最近在工作中决定做一个ruby风格的指南。其中一条法令是行的宽度不应该超过80个字符。因为这是一个Rails项目,我们经常会有稍微长一点的字符串-例如“User X wanted to send you a message about Thing Y”,它并不总是符合80个字符的风格限制。
我知道有三种方法可以让一个长字符串跨越多行:
- HEREDOC
- %Q{}
- 实际字符串串联。
然而,所有这些情况最终都需要更多的计算周期,这看起来很愚蠢。字符串连接很明显,但是对于HEREDOC
和%Q
,我必须通过类似.gsub(/\n$/, '')
的东西去掉换行符。
有没有一种纯语法的方法来做到这一点,它相当于把整个字符串放在一行上?很明显,目标是不花费任何额外的周期,只是因为我希望我的代码更具可读性。(是的,我意识到你必须做出很多权衡.但对于字符串长度,这似乎很愚蠢。)
更新:反斜杠并不是我想要的,因为你失去了缩进,这真的会影响风格/可读性。
示例如下:
if foo
string = "this is a \
string that spans lines"
end
字符串
我觉得上面的内容有点难以阅读。
编辑:我在下面添加了一个答案;三年后,我们现在有了歪歪扭扭的heredoc。
9条答案
按热度按时间ukqbszuj1#
或许这就是你要找的?
字符串
93ze6v8z2#
你可以使用
\
来表示Ruby的任何一行都在下一行继续。这也适用于字符串:字符串
将输出
"this is a string that spans lines"
clj7thdc3#
三年后,Ruby 2.3中出现了一个解决方案:波浪形的heredoc。
字符串
博客文章链接:https://infinum.co/the-capsized-eight/articles/multiline-strings-ruby-2-3-0-the-squiggly-heredoc
缩进最少的行的缩进将从内容的每一行中删除。
oewdyzsn4#
这是一个很老的问题了,但是现在这个问题似乎仍然会出现,这里有一个更新的答案。因为最初的海报表明这是一个Rails项目,你可以从Rails的字符串变化中寻求帮助。
字符串
输入
squish
方法。型
根据文件-
squish()
返回字符串,首先删除字符串两端的所有空格,然后将剩余的连续空格组更改为每个空格。wnrlj8wa5#
当我尝试写一个很长的URL时,我遇到了这个问题,下面的工作。
字符串
注意,当URL字符串形成时,不能有任何换行符,白色空格。如果你想要换行符,那么使用HEREDOC。
为了可读性和便于修改,这里使用了缩进,每行都没有繁琐的引号和反斜杠。连接字符串的成本应该可以忽略不计。
cyvaqqii6#
我修改了Zack的答案,因为我想要空格和插值,而不是换行符,并使用:
字符串
其中
name = 'fred'
这产生It's a nice day "fred" for a walk!
7fhtutme7#
Rails中的Squish正在做你需要的事情。
https://apidock.com/rails/String/squish
结束它看起来像这样:
字符串
因为你在Ruby中需要它,所以看看Rails代码:
型
vmdwslir8#
您可以连接拆分在多行中的多个字符串:
字符串
fjnneemd9#
如果你想使用反斜杠,并希望将字符串括起来,只需将它们括在引号中:
字符串
这是一个多行字符串!