Ruby中的冻结对象

Ruby| 冻结对象

在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的错误,因为我们试图借助其他一些方法来更改冻结对象的变量。我们知道,冻结的对象的变量无法带来任何变化。