【问题标题】:Use \ instead of + or << to concatenate those strings使用 \ 而不是 + 或 << 来连接这些字符串
【发布时间】:2014-06-14 17:09:24
【问题描述】:

我正在使用 rubocop 来清理我凌乱的代码...

其中一个错误是:

使用 \ 而不是 + 或

这是为什么?

我在Ruby documentation 中找不到它。为什么我要使用\ 而不是+&lt;&lt;

【问题讨论】:

    标签: ruby-on-rails ruby rubocop


    【解决方案1】:

    \ 在行尾将阻止解释器将换行符视为语句结束。因此,您可以制作多行字符串,而无需消耗连接或附加的成本。

    【讨论】:

      【解决方案2】:

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

      str = "foo" + "bar"
      

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

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

      "foo" << "bar"
      

      在许多情况下,这只是轻微的效率低下,您不必太担心。

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

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

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

      【讨论】:

      • 这是一个很好的深入回答。
      • 谢谢。我认为这是编写 Ruby 程序时需要注意的一个重要领域。
      猜你喜欢
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-10
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多