任何人都可以在Ruby中列出不可变对象..
我看到Ruby - Immutable Objects这个,我知道如何将可变对象转换为不可变对象,但不清楚ruby中不可变对象。
答案 0 :(得分:3)
根据我的经验,您有两种选择:
freeze
任何对象,这意味着深度冻结,您不仅要冻结主要对象,还要冻结任何包含的对象,以防止修改。第二种方法是大多数应用程序使用的方法,因为一旦冻结,就无法解冻某些东西。 Objective-C具有许多对象的可变和非可变变体,C ++有const
可以阻止修改任何对象,但Ruby中没有这样的东西。
这很大程度上是因为Ruby方法可以自由地做任何他们想要的事情,而且约束方式很少。 reader方法可以修改对象的状态吗?是。你可能有充分的理由这样做,Ruby不会妨碍你。
如果您正在编写依赖于处于非更改状态的对象的代码,请复制,冻结并使用该代码进行参考。这可能会大大减慢您的应用程序的速度并使其复杂化,因此这是一种非常严厉的方法。
最好的方法是尽可能少地共享信息,为设计中只读的信息提供接口,并通过采用适当的锁定措施避免篡改特定情况之外的事物。