如何使我的 class 属性无法直接访问实例变量?

How do I make my class attribute not be able to access instance variable directly?

我怎样才能使我的代码工作,以便 balance 属性不直接访问实例变量(我相信它是@balance)?有人可以解释 access 实例变量的属性的含义吗?

我是 Ruby 的新手,刚开始学习 Ruby 类。在本章中,我的目标是理解实例变量的概念,演示getter和setter方法的用法,理解如何使用实例方法,理解封装的概念。

class BankAccount
  attr_accessor :balance

  def initialize(balance)
    @balance = balance
  end

  def withdraw(amount)
    if (balance >= amount)
      @balance = balance - amount
    end
  end
end

定义您自己的 balance reader 方法版本:

class BankAccount
  attr_accessor :balance

  def initialize(balance)
    @balance = balance
  end

  def withdraw(amount)
    if (balance >= amount)
      @balance = balance - amount
    end
  end

  def balance
    'balance from method directly'
  end
end

现在,当您调用 balance 方法时,它会读取您定义的方法和相应的 return 值。

在Ruby中attr_reader :balance或多或少只是以下方法的一个方便版本:

def balance
  @balance
end

同样,attr_writer :balance只是

的缩写形式
def balance=(value)
  @balance = value
end

attr_accessor :balanceattr_reader :balanceattr_writer :balance的缩写。

所以你可以看到attr_reader 访问实例变量没有什么特别的,例如在您的代码中,您还可以访问 #initalize#withdraw.

中的实例变量

您需要说明您不想直接访问它的原因。这甚至意味着什么。因为您可以使用 @balance 或不使用来访问实例变量,所以我认为没有 indirect