我正在使用 rubocop 基本上清理我凌乱的代码......
其中一个错误是:
使用 \ 而不是 + 或 << 来连接这些字符串。
为什么是这样?
我在Ruby 文档中找不到它。为什么我要使用\
而不是+
or <<
?
我正在使用 rubocop 基本上清理我凌乱的代码......
其中一个错误是:
使用 \ 而不是 + 或 << 来连接这些字符串。
为什么是这样?
我在Ruby 文档中找不到它。为什么我要使用\
而不是+
or <<
?
在 Ruby 中,文字字符串在遇到时被分配为内存中的对象。如果您连接两个字符串文字,如
str = "foo" + "bar"
您实际上将分配三个String
对象:"foo"
和"bar"
连接的结果(然后由 引用str
)。
如果您这样做,也会发生同样的情况:
"foo" << "bar"
在许多情况下,这只是轻微的低效率,您不必太担心。
但是,请注意,如果您在循环中执行此操作,并且聚合String
变大,您将在每次迭代时分配一个更大的String
对象(您可以通过收集字符串部分来避免这种情况Array
,然后join
在完成时调用; 同样,foo << 'bar'
将foo
就地修改,这在循环中是可以接受的)。
通过使用\
,您不会连接中间对象,而是有效地为解析器提供一个String
文字(因为\
只需在下一行继续字符串)。
这个"foo" + "bar" + "baz"
习语在 Java 中经常使用,其中字符串是不可变的,并且在编译时将文字连接起来。(Java 中的每个字符串文字只存储一次,然后在整个代码中重复使用;Ruby 不会这样做。)此外,Java 没有更好的方法来在多行中继续字符串,这就是 Java 程序员这样做的原因。
\
在行尾将阻止解释器将换行符视为语句结束。因此,您可以制作多行字符串,而无需花费连接或附加的成本。