如何凍結 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