Ruby类混乱

时间:2014-03-19 14:49:20

标签: ruby class variables

我对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时,它都会使用.new方法(我认为会激活初始化方法)来创建一个具有给定名称的新帐户。

然后,根据我的理解,当我们在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 个答案:

答案 0 :(得分:3)

  

虽然我的印象是,每当我们现在调用bank_account时,它都会使用BankAccount类创建一个新帐户。

那不对。您的代码只会调用BankAccount.new 一次。结果已分配给bank_account。每次访问bank_account时,您都会访问在第一行创建的构造对象。

当您撰写x = Y.new时,您并未将表达式Y.new分配给x,而是评估表达式{{ 1}}并将结果分配给Y.new

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