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

时间:2014-04-28 23:58:22

标签: ruby-on-rails ruby rubocop

我使用rubocop基本上清理我乱糟糟的代码......

其中一个错误是:

  

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

为什么会这样?

我无法在Ruby documentation中找到它。为什么我会使用\代替+<<

2 个答案:

答案 0 :(得分:25)

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

str = "foo" + "bar"

您实际上会分配三个String个对象:"foo""bar"和连接的结果(然后由str引用)。

如果您这样做,也会发生同样的情况:

"foo" << "bar"

在许多情况下,这只是一种温和的低效率,您不必过于担心。

但是,请注意,如果您在循环中执行此操作,并且聚合String变大,您将在每次迭代时分配一个更大的String对象(您可以通过收集来避免这种情况) Array中的字符串部分,然后在完成后调用join;同时,foo << 'bar'将修改foo,这在循环中是可接受的。)< / p>

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

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

答案 1 :(得分:4)

一行末尾的

\将阻止解释器将换行视为语句结束。因此,您可以制作多行字符串而不会产生连接或附加成本。