为什么文字字符串应该开始冻结? (Ruby 2.1)

时间:2013-10-03 21:20:00

标签: ruby immutability ruby-2.1

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

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

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

other Ruby documentation/wiki我已经读过这个功能提供了以下好处:

  

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

我的问题是:

  • 这有什么好处?
  • 什么是这样的功能何时能提供价值的真实世界示例?
  • symbol
  • 有何不同?

谢谢

1 个答案:

答案 0 :(得分: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