2014-03-19 152 views
0

我有点难以理解Ruby类的运作。我了解课堂内部发生的一切,但是这是课堂的变量赋值和调用,让我感到困惑。Ruby类困惑

class BankAccount 

def initialize(name) 
    @transactions = [] 
    @balance = 0 # 
end 

def deposit 
    print "How much would you like to deposit?" 
    amount = gets.chomp 
    @balance += amount.to_f 
    puts "$#{amount} deposited." 
end 

def show_balance 
    puts "Your balance is #{@balance}." 
end 

end 

bank_account = BankAccount.new("James Dean") 
bank_account.class 

bank_account.deposit 
bank_account.show_balance 

当我们做...

bank_account = BankAccount.new("James Dean") 

...它好像每当我打电话BANK_ACCOUNT,它将使用。新的方法(我带领相信激活初始化方法)创建一个具有给定名称的新帐户。

然后,根据我所了解的,当我们在bank_account上调用.class时,它只输出类的类型。

但是,接下来我们调用bank_account.deposit。虽然,我的印象是,每当我们现在称之为BANK_ACCOUNT,它会创建一个使用BankAccount的新帐户...所以做bank_account.deposit,我设想它实际上做的是:

BankAccount.new("James Dean").deposit 

因此,如果我进行两次存款(或者甚至使用bank_account.show_balance),那么从我的理解来看,每次使​​用bank_account变量时,都会重复创建名称为James Dean的新帐户。 (因为bank_account = BankAccount.new)

任何人都可以帮我明白这一点,并理解它好一点吗?

此外,只是一个侧面说明,我们可以永远使用:

BankAccount.new(gets.chomp) 

,使我们可以根据用户输入创建名新帐户?

(感谢大家。这是我的第三个问题,我的前两次显然已经被张贴在错误的地方。-_-希望我有这个权利。)

+1

'BankAccount.new(gets.chomp)' - 可以但不应该 – gaussblurinc

回答

3

虽然,我的下我们现在每次调用bank_account时都会使用BankAccount类创建一个新账户。

这是不对的。您的代码只能拨打BankAccount.new一次。结果分配给bank_account。每次访问bank_account时,都会访问在第一行创建的构造对象。

当你写x = Y.new,你并没有使用表达Y.newx,你评估表达Y.new和分配结果x

同样,如果您编写x = my_function(),函数将进行评估并将结果分配给x;从这一点对x的任何引用都与该函数完全分离。