Ruby封裝性如何設(shè)置屬性訪(fǎng)問(wèn)權(quán)限

小樊
81
2024-11-06 07:54:43

在Ruby中,可以通過(guò)使用attr_accessorattr_reader以及attr_writer方法來(lái)設(shè)置屬性的訪(fǎng)問(wèn)權(quán)限。這些方法分別用于創(chuàng)建可讀寫(xiě)的屬性和只讀屬性。

  1. attr_accessor:為類(lèi)創(chuàng)建一對(duì)getter和setter方法。這使得你可以讀取和修改屬性的值。
class MyClass
  attr_accessor :my_attribute
end

obj = MyClass.new
obj.my_attribute = "Hello, World!" # 設(shè)置屬性值
puts obj.my_attribute # 讀取屬性值
  1. attr_reader:為類(lèi)創(chuàng)建一個(gè)getter方法,但不提供setter方法。這使得你可以讀取屬性的值,但不能修改它。
class MyClass
  attr_reader :my_attribute
end

obj = MyClass.new
obj.my_attribute = "Hello, World!" # 設(shè)置屬性值
puts obj.my_attribute # 讀取屬性值
  1. attr_writer:為類(lèi)創(chuàng)建一個(gè)setter方法,但不提供getter方法。這使得你可以修改屬性的值,但不能讀取它。
class MyClass
  attr_writer :my_attribute
end

obj = MyClass.new
obj.my_attribute = "Hello, World!" # 設(shè)置屬性值

注意:如果你想要限制屬性的訪(fǎng)問(wèn)權(quán)限,可以使用模塊(module)來(lái)實(shí)現(xiàn)。例如,你可以創(chuàng)建一個(gè)名為RestrictedAccess的模塊,其中包含一個(gè)read_attribute方法,用于限制對(duì)特定屬性的讀取訪(fǎng)問(wèn)。然后,將這個(gè)模塊包含在你的類(lèi)中,并在需要限制訪(fǎng)問(wèn)的屬性上使用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!" # 設(shè)置屬性值

begin
  puts obj.my_attribute # 這將引發(fā)異常,因?yàn)閞ead_attribute方法被重寫(xiě)以禁止讀取屬性
rescue => e
  puts e.message
end

在這個(gè)例子中,我們重寫(xiě)了read_attribute方法,使其在嘗試讀取屬性時(shí)引發(fā)異常。這樣,我們就可以通過(guò)使用RestrictedAccess模塊來(lái)限制對(duì)特定屬性的訪(fǎng)問(wèn)。

0