如何冻结 Ruby 中的对象?
有时会出现一种情况,即我们需要冻结对象实例,这样它才不能被实例化或修改,在 Ruby 中,我们可以借助 freeze 关键字来实现这一点。
方法是调用 Object#freeze 语句。
当我们冻结一个对象时,我们基本上将它变成一个常量,并且应该注意,一旦一个对象被冻结,就无法取消冻结。
语法
freeze 一个对象的语法如下所示。
Object.freeze
现在我们对 freeze 有了一定的了解,让我们举几个例子来了解它的工作原理。
示例 1
考虑下面的代码
veggies = ["spinach", "cucumber", "potato"] veggies.freeze veggies << "cauliflower"
在上面的代码中,有一个名为 veggies 的数组,其中包含三个字符串,然后在下一行,我调用了 freeze 方法,最后,我尝试向数组中添加另一个字符串。
输出
main.rb:3:in `<main>': can't modify frozen Array (RuntimeError)
示例 2
让我们考虑一个稍微复杂的示例,其中我们将使用 getter 和 setter,然后将其中一个方法设置为 frozen。考虑以下代码。
# Freezing object example
# define a class
class Subtract
# constructor method
def initialize(x, y)
@first, @second = x, y
end
# accessor methods
def getA
@first
end
def getB
@second
end
# setter methods
def setA=(value)
@first = value
end
def setB=(value)
@second = value
end
end
# create an object
add = Subtract.new(10, 20)
# let us freez this object
add.freeze
if( add.frozen? )
puts "Frozen object"
else
puts "Normal object"
end
# now try using setter methods
sub.setA = 30
sub.setB = 50
# use accessor methods
sub.getA()
sub.getB()
puts "First is : #{sub.getA()}"
puts "Second is : #{sub.getB()}"输出
Frozen object main.rb:37:in `<main>': undefined local variable or method `sub' for main:Object (NameError)
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP