我对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)
这样我们就可以根据用户输入创建名称的新帐户了吗?
(谢谢大家。这是我的第三个问题,我的前两个人显然已经被发布在错误的地方。-_-希望我能把这个问题弄好。)
答案 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
的任何引用都与函数完全分离。