2012-08-02 23 views
1
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 

红宝石,是什么和初始化一个setter之间的差值方法

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方法有什么区别。 如果我有一个对象测试= Account.new(),为什么测试(30)给出一个错误。是不是假设用参数30调用setter方法并设置余额?

回答

3

initialize是当您执行Account.newAccount.new(my_starting_balance)时在新创建的对象上调用的方法。在第一种情况下,initialize将被调用,默认值0starting_balance,第二种情况下为my_starting_balance

设置方法balance=在您执行时调用my_account.balance = some_value其中my_accountAccount类的实例。所以,如果你有下面的代码,initialize将第1行第2行(23)作为参数调用(以0作为参数)和balance=

my_account = Account.new 
my_account.balance = 23 

当然,在这种情况下,我可以只并写上如下而不是在所有使用setter方法:

my_account = Account.new(23) 

但是这并不总是工作,因为有些时候,你可能要改变后的对象已经创建的balance值。

如果我有一个对象test = Account.new(),为什么test(30)会给出一个错误。

因为test(30)意味着“调用该方法test与参数30”并没有所谓的在你的代码test方法。


关于你的代码的第二部分以粗体显示:正如评论指出,这台名为@@bank_name类变量,并定义返回变量的值一类方法。

+0

谢谢您的详细解答。在这里学到了一些东西。 – Selvam 2012-08-08 04:21:19