Ruby 为什么这个不“冻结”字符串?

Ruby 为什么这个不“冻结”字符串?,ruby,string,object,freeze,Ruby,String,Object,Freeze,我已作出以下决定: a = 1280 b = 900 a.freeze b.freeze a = 800 b = 600 puts a puts b 其结果是: 800 600 但是,它说,如果我试图修改一个冻结的现有对象,它会给我带来一个错误。有人能告诉我出了什么问题吗?赋值不会修改对象,但会使变量引用另一个对象;所以冻结不适用于这里。好的,那太快了。那么,在赋值一次之后,我可以做些什么来冻结我的值呢?我想将其设置为自定义值,并在用户从我提供的菜单中选择“保存”后将其冻结。@user379

我已作出以下决定:

a = 1280
b = 900
a.freeze
b.freeze
a = 800
b = 600
puts a
puts b
其结果是:

800
600

但是,它说,如果我试图修改一个冻结的现有对象,它会给我带来一个错误。有人能告诉我出了什么问题吗?

赋值不会修改对象,但会使变量引用另一个对象;所以冻结不适用于这里。

好的,那太快了。那么,在赋值一次之后,我可以做些什么来冻结我的值呢?我想将其设置为自定义值,并在用户从我提供的菜单中选择“保存”后将其冻结。@user3797760,一旦冻结,修改对象的操作如下String@user3797760,那么,在赋值一次后,如何冻结值?编写不再分配给这些变量的代码。如果希望变量为常量,则应使用常量,即以大写字母开头的标识符,而不是以小写字母开头的变量。注意,常数实际上可以在Ruby中重新分配,所以它们实际上不是常数,但至少它们会生成一个警告。