Ruby冻结对性能的影响



这些有什么不同?

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

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

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

答案是,第一个:

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

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

此外,如果执行以下操作:CONST = ["a".freeze, "b".freeze],则仅意味着冻结数组的这两个元素。例如,您仍然可以修改CONST数组并向其中添加项,这不是人们通常想要的。

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

最新更新