2

在开发 Ruby 2.1 之后,我读到了一个可能会添加的功能,因此允许开发人员指定文字字符串应该从“冻结”开始。

语法如下所示(注意尾随f):

str = "imfrozen"f    # str receives a frozen string

其他 Ruby 文档/wiki中,我读到此功能提供以下好处:

这允许 VM 每次都使用相同的字符串对象,并且可能跨多个文件使用相同的冻结字符串。它显然还提供了冻结字符串的所有不变性保证。

我的问题是:

  • 这有什么好处?
  • 当这样的功能提供价值时,现实世界的例子是什么?
  • 这与 a 有何不同symbol

谢谢

4

1 回答 1

7

假设你有这样的代码

array_that_is_very_long.each do |e|
  if e == "foo"
    ...
  end
end

在这段代码中,对于 的每次迭代array_that_is_very_long,都会创建一个新字符串"foo"(并被丢弃),这是对资源的巨大浪费。目前,您可以通过以下方式解决此问题:

Foo = "foo"
array_that_is_very_long.each do |e|
  if e == Foo
    ...
  end
end

建议的语法使这样做更容易:

array_that_is_very_long.each do |e|
  if e == "foo"f
    ...
  end
end
于 2013-10-03T21:35:21.100 回答