在Ruby中冻结对象或实例意味着我们不允许将来对其进行修改。您可以这样一种方式来理解它:您不能更改其实例变量,不能向其提供单例方法,也不能冻结我们的类或模块,也不能添加,删除和带入某些变量。方法的变化。
如何在Ruby中冻结对象?
您可以通过调用Frozen方法冻结Ruby中的对象,该方法是Ruby库中Object Class中定义的方法。有没有一种方法,以解冻被冻结后的对象。
语法:
Object_name.freeze
如何检查物体是否冻结?
有一种非常简单的方法来检查对象是否冻结。您只需要调用冻结?Object类的方法。如果该方法返回true,则将冻结对象,否则不会冻结。
语法:
Object_name.frozen?
程序:
=begin Ruby program to demonstrate frozen objects =end class Multiply def initialize(num1,num2) @f_no = num1 @s_no = num2 end def getnum1 @f_no end def getnum1 @s_no end def setnum1=(value) @f_no = value end def setnum2=(value) @s_no = value end end mul = Multiply.new(23,34) mul.freeze if(mul.frozen?) puts "mul is frozen object" else puts "mul is not frozen object" end mul.setnum2=12 mul.setnum1=13 puts "Y is #{mul.getnum1()}" puts "Z is #{mul.getnum2()}"
输出结果
mul is frozen object can't modify frozen Multiply (repl):20:in `setnum2=' (repl):33:in `<main>'
说明:
在上面的代码中,您可以观察到借助Object.freeze方法已冻结了对象mul。我们收到一个称为FrozenError的错误,因为我们试图借助其他一些方法来更改冻结对象的变量。我们知道,冻结的对象的变量无法带来任何变化。