class Account
def initialize(starting_balance = 0)
@balance = starting_balance
end
def balance #instance getter method
@balance #instance variable visible only to this object
end
的
def balance=(new_amount)
@balance = new_amount
end
的
def deposit(amount)
@balance+=amount
end
的
@@bank_name= "MyBank.com" # class (static) variable
# A class method
def self.bank_name
@@bank_name
end
# or: def SavingsAccount.bank_name : @@bank_name : end
的
end
我想以粗体理解代码段。他们在做什么? setter和initialize方法之间有什么区别。 如果我有一个对象test = Account.new(),为什么test(30)给出错误。是不是假设用参数30调用setter方法并设置余额?
答案 0 :(得分:3)
initialize
是执行Account.new
或Account.new(my_starting_balance)
时在新创建的对象上调用的方法。在第一种情况下,initialize
将使用0
的默认值starting_balance
和my_starting_balance
的第二种情况调用。
当balance=
my_account.balance = some_value
是类my_account
的实例时,会调用setter方法Account
。因此,如果您有以下代码,{1}将在第1行(以0为参数)和第2行{以及23为initialize
作为参数调用:
balance=
当然在这种情况下,我也可以编写以下内容,而不是使用setter方法:
my_account = Account.new
my_account.balance = 23
然而,这并不总是有效,因为有些时候您可能想要在创建对象之后更改my_account = Account.new(23)
的值。
如果我有一个对象test = Account.new(),为什么test(30)会出错。
因为balance
表示"使用参数30"调用方法test(30)
;并且代码中没有名为test
的方法。
关于代码的第二个粗体部分:正如注释所示,它设置了一个名为test
的类变量,并定义了一个返回该变量值的类方法。