当字符串默认为不可变时,我如何描述可变字符串?

8
当一个文件拥有Pragma时:
# frozen_string_literal: true

该文件中的所有字符串被默认冻结。当我想要我的字符串整体不可变,并且使用了pragma时,但想要有几个可变字符串,应该如何编写?

我能想到的唯一方法是:

String.new("foo")

刚想说“dup”也是。只是这是很酷的新东西,社区还没有对它形成惯例。 - ndnenkov
@ndn 我不在乎约定俗成的规范。重要的是简洁、易读、高效等方面。 - sawa
没有像 "foo"u 这样的新语法,如果您在问这个的话。 Object#dup 是最简洁的。至于性能,如果 String.new 更好,我会感到惊讶。 - ndnenkov
2个回答

8
我错过了它。推荐的方法是使用+@方法字符串字面值。
(+"foo").frozen? # => false
(-"foo").frozen? # => true
"foo".frozen? # => true

4
您可以使用dup来复制文字字面值,使其可变:
"foo".dup.frozen? # => false

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接