如何让我的代码工作,以便balance属性不直接访问实例变量(我相信它是@balance)?有人可以解释访问实例变量的属性意味着什么吗?
我是使用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
答案 0 :(得分:1)
在Ruby中attr_reader :balance
或多或少只是以下方法的便利版本:
def balance
@balance
end
同样,attr_writer :balance
只是
def balance=(value)
@balance = value
end
attr_accessor :balance
是attr_reader :balance
加上attr_writer :balance
的缩写。
因为您可以看到attr_reader
访问,实例变量并不特别,例如在您的代码中,您还可以访问#initalize
和#withdraw
中的实例变量。
您需要澄清为什么不想直接访问它。甚至意味着什么。因为您可以使用@balance
访问实例变量,所以我认为没有间接。
答案 1 :(得分:0)
定义您自己的balance
读者方法版本:
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
方法时,它会读取您定义的方法并相应地返回值。