Ruby冻结的性能影响

时间:2015-11-06 03:34:12

标签: ruby-on-rails ruby

这些有何不同?

CONST = ["a","b"].freeze

CONST = ["a".freeze, "b".freeze]

我知道第一个会冻结对数组的任何修改,但从Rails的角度来看,如果我在我的应用程序中不断加载此常量,这是一种更好的节省内存的方法吗?

1 个答案:

答案 0 :(得分:1)

答案是,第一个:

CONST = ["a","b"].freeze

因为如果冻结数组,无论如何都无法修改数组。

另外,如果你这样做:CONST = ["a".freeze, "b".freeze],它只是意味着你只是冻结数组的这两个元素。您仍然可以修改CONST数组并向其添加项目,例如,这不是人们通常想要的。

此外,对于CONST = ["a","b"].freeze,数组被冻结,但数组项仍然可以修改(因为它们仍然是字符串,因此是可变的):CONST[0] << 'something'仍然有效。所以,如果你真的想要冻结数组以及冻结的所有项目,那么你需要在每个项目上调用.freezeCONST = ["a".freeze, "b".freeze].freeze这是非常不寻常的根据我的经验练习。但是,这当然取决于你的需要。