在Ruby中,可以通過使用attr_accessor
和attr_reader
以及attr_writer
方法來設置屬性的訪問權限。這些方法分別用于創建可讀寫的屬性和只讀屬性。
attr_accessor
:為類創建一對getter和setter方法。這使得你可以讀取和修改屬性的值。class MyClass
attr_accessor :my_attribute
end
obj = MyClass.new
obj.my_attribute = "Hello, World!" # 設置屬性值
puts obj.my_attribute # 讀取屬性值
attr_reader
:為類創建一個getter方法,但不提供setter方法。這使得你可以讀取屬性的值,但不能修改它。class MyClass
attr_reader :my_attribute
end
obj = MyClass.new
obj.my_attribute = "Hello, World!" # 設置屬性值
puts obj.my_attribute # 讀取屬性值
attr_writer
:為類創建一個setter方法,但不提供getter方法。這使得你可以修改屬性的值,但不能讀取它。class MyClass
attr_writer :my_attribute
end
obj = MyClass.new
obj.my_attribute = "Hello, World!" # 設置屬性值
注意:如果你想要限制屬性的訪問權限,可以使用模塊(module)來實現。例如,你可以創建一個名為RestrictedAccess
的模塊,其中包含一個read_attribute
方法,用于限制對特定屬性的讀取訪問。然后,將這個模塊包含在你的類中,并在需要限制訪問的屬性上使用read_attribute
方法。
module RestrictedAccess
def read_attribute(attr)
raise "Cannot read attribute: #{attr}"
end
end
class MyClass
include RestrictedAccess
attr_accessor :my_attribute
end
obj = MyClass.new
obj.my_attribute = "Hello, World!" # 設置屬性值
begin
puts obj.my_attribute # 這將引發異常,因為read_attribute方法被重寫以禁止讀取屬性
rescue => e
puts e.message
end
在這個例子中,我們重寫了read_attribute
方法,使其在嘗試讀取屬性時引發異常。這樣,我們就可以通過使用RestrictedAccess
模塊來限制對特定屬性的訪問。