这里是我的类:未定义的局部变量红宝石
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
方法。
任何帮助将不胜感激。
哇...我觉得稍微令人目瞪口呆。我总是认为你不需要在变量名中包含'@'符号,因为我已经使用了诸如'#{dollars}'这样的行,并且它工作正常。谢谢你教我这个简单的错误。 – 2013-05-06 07:42:51
@randynewfield很高兴我可以帮忙! :) – 2013-05-06 07:43:23
@randynewfield当你为一个实例变量进行字符串插值时,你不需要使用的是括号。这样你就可以做这个'“#@ count”' – vgoff 2013-05-06 16:10:34