在 Ruby 2.1 的开发之后,我读到了一个可能会添加的功能,因此允许开发人员指定文字字符串应该以"冻结"开头。
语法如下所示(请注意尾随f
):
str = "imfrozen"f # str receives a frozen string
在其他 Ruby 文档/wiki 中,我读到此功能提供了以下好处:
这允许 VM 每次使用相同的字符串对象,并且 可能适用于跨多个文件的同一冻结字符串。它还 显然提供了冻结字符串的所有不变性保证。
我的问题是:
- 这样做有什么好处? 当
- 这样的功能提供价值时,真实世界的例子是什么?
- 这与
symbol
有何不同?
谢谢
假设你有这样的代码
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