【发布时间】:2014-06-14 17:09:24
【问题描述】:
我正在使用 rubocop 来清理我凌乱的代码...
其中一个错误是:
使用 \ 而不是 + 或
这是为什么?
我在Ruby documentation 中找不到它。为什么我要使用\ 而不是+ 或<<?
【问题讨论】:
标签: ruby-on-rails ruby rubocop
我正在使用 rubocop 来清理我凌乱的代码...
其中一个错误是:
使用 \ 而不是 + 或
这是为什么?
我在Ruby documentation 中找不到它。为什么我要使用\ 而不是+ 或<<?
【问题讨论】:
标签: ruby-on-rails ruby rubocop
\ 在行尾将阻止解释器将换行符视为语句结束。因此,您可以制作多行字符串,而无需消耗连接或附加的成本。
【讨论】:
在 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 程序员这样做的原因。
【讨论】: