【发布时间】:2013-01-29 07:47:40
【问题描述】:
我有一个BankAccount 课程。我试图创建这个类的多个实例并将它们放入一个数组中。例如
accounts = [Ba1 = BankAccount.new(100), Ba2 = BankAccount.new(100)]
我想用里面的大量实例来初始化数组,比如说20个,所以从Ba1到Ba20。有没有比手动输入更简单的方法呢?我尝试了一个循环,但我就是不知道如何让它工作。
【问题讨论】:
我有一个BankAccount 课程。我试图创建这个类的多个实例并将它们放入一个数组中。例如
accounts = [Ba1 = BankAccount.new(100), Ba2 = BankAccount.new(100)]
我想用里面的大量实例来初始化数组,比如说20个,所以从Ba1到Ba20。有没有比手动输入更简单的方法呢?我尝试了一个循环,但我就是不知道如何让它工作。
【问题讨论】:
这应该可以解决问题:
accounts = 100.times.collect { BankAccount.new(100) }
如果您需要根据每个帐户的不同为每个帐户做一些不同的事情:
accounts = 100.times.collect { |i| BankAccount.new(i) }
i 表示被迭代的集合中的每个数字。
如果您确实需要使用数据设置变量名称,可以调用eval()。
accounts = 100.times.collect { |i| eval("B#{i} = BankAccount.new(100)") }
现在应该将B1 到B100 设置为适当的BankAccount 实例。
免责声明:
我应该说,这种方法通常会不受欢迎。在这种情况下,您已经有一个名为 accounts 的数组。您需要做的就是对其进行索引以获取相应的银行帐户。例如accounts[50] 而不是Ba50。在我多年的 ruby 开发中,我发现很少有地方使用 eval 是有意义的。
【讨论】: