使用\而不是+或<<来连接这些字符串

Ben*_*nIO 16 ruby ruby-on-rails rubocop

我正在使用rubocop基本上清理我凌乱的代码......

其中一个错误是:

使用\而不是+或<<来连接这些字符串.

为什么是这样?

我在Ruby文档中找不到它.为什么要使用\替代+<<

Sig*_*igi 25

在Ruby中,文字字符串在遇到它们时会被分配为内存中的对象.如果你连接两个字符串文字,如

str = "foo" + "bar"
Run Code Online (Sandbox Code Playgroud)

你将实际分配3个String对象:"foo","bar"以及级联的结果(其然后被称为str).

如果你这样做会发生同样的事情

"foo" << "bar"
Run Code Online (Sandbox Code Playgroud)

在许多情况下,这只是一个温和的低效率,你不应该太担心.

但是,要注意如果你在循环中这样做,并且如果聚合String变大,你将String在每次迭代时分配一个更大的对象(你可以通过收集一个字符串部分来避免它Array,然后join在你完成时调用;并且,foo << 'bar'foo在适当的位置进行修改,这在循环中是可接受的).

通过使用\你不会连接中间对象,而是有效地向解析器提供一个String文字(因为\只是继续下一行的字符串).

这个"foo" + "bar" + "baz"习惯用法经常在Java中使用,其中字符串是不可变的,文字在编译时连接在一起.(Java中的每个字符串文字只存储一次,然后在整个代码中重用; Ruby不会这样做.)此外,Java没有更好的方法可以在多行上继续字符串,这就是Java程序员这样做的原因.


ale*_*lex 5

\行尾处将阻止解释器将换行符视为语句结尾。因此,您可以创建多行字符串,而无需承担连接或附加的成本。