这是我的班级:
class Money
def initialize(dollars, quarters, dimes, nickels, pennies)
@coins = [ {:coin => dollars, :price => 100},
{:coin => quarters, :price => 25},
{:coin => dimes, :price => 10},
{:coin => nickels, :price => 5},
{:coin => pennies, :price => 1} ]
end
def count
total = 0.00
coins.each do |coin|
next if coin[:price] == 0
total += coin[:coin] * coin[:price]
end
total / 100
end
end
我正在测试它:
money = Money.new( 5, 1, 2, 1, 0 )
puts "$%.2f" % money.count
我收到错误:
money.rb:12:in `count': undefined local variable or method `coins' for #<Money:0x2567310> (NameError)
from money.rb:34:in `<main>'
指向行coins.each do |coin|
并且对我没有意义,因为我认为,如果我使用@
为变量添加前缀,我可以在整个对象的方法中使用它(它不会转移到另一个对象)。
我使用不同的代码来完成这项工作:
@dollar = dollar
@quarter = quarter
...
对于我的initialize
方法(我的count
方法完全不同),但现在我正在尝试创建一个哈希表数组,以便我可以重构我的count
方法。 / p>
任何帮助将不胜感激。
答案 0 :(得分:4)
在count()
方法中,请将coins
称为@coins
。
否则,您创建的变量仅适用于您的方法,而不是引用您在initialize()
所以它写着:
def count
total = 0.00
@coins.each do |coin|
next if coin[:price] == 0
total += coin[:coin] * coin[:price]
end
total / 100
end
答案 1 :(得分:2)
如果您创建实例变量(使用@
),则必须始终使用@
引用它。
def count
total = 0.00
@coins.each do |coin| #Here was your error
next if coin[:price] == 0
total += coin[:coin] * coin[:price]
end
total / 100
end