📜  冻结对象 |红宝石

📅  最后修改于: 2022-05-13 01:54:32.154000             🧑  作者: Mango

冻结对象 |红宝石

任何对象都可以通过调用Object#freeze来冻结。一个冻结的对象不能被修改:我们不能改变它的实例变量,我们不能将单例方法与它关联,如果它是一个类或模块,我们不能添加、删除或修改它的方法。
要测试一个对象是否被冻结,我们可以使用 Object#frozen。如果对象被冻结,则返回true ,否则返回false值。 object 中的 freeze 方法允许我们将一个对象变成一个常量。
请注意,冻结的对象无法解冻。

Syntax: ObjectName.freeze

下面是一个更好理解的例子:
例子:

Ruby
# Ruby program of freezing object
 
# define a class
class Addition
   # constructor method
   def initialize(x, y)
      @a, @b = x, y
   end
 
   # accessor methods
   def getA
      @a
   end
   def getB
      @b
   end
 
   # setter methods
   def setA=(value)
      @a = value
   end
   def setB=(value)
      @b = value
   end
end
 
# create an object
add = Addition.new(10, 20)
 
# let us freeze this object
add.freeze
if( add.frozen? )
   puts "Addition object is frozen object"
else
   puts "Addition object is normal object"
end
 
# now try using setter methods
add.setA = 30
add.setB = 50
 
# use accessor methods
add.getA()
add.getB()
 
puts "A is : #{add.getA()}"
puts "B is : #{add.getB()}"


输出 :

在上面的示例中,创建了一个类Addition然后我们创建一个对象名称为add 。通过使用add.freeze方法,对象现在被冻结了,我们不能改变它的方法的值。在这里, add.frozen?方法用于显示对象是否冻结。