次のコードを検討してください
class CheckOut
@rules
@total = 0
@basket = Hash.new
def initialize(rules, discounts)
@total=0
#if i use the line below everything is ok.
#@basket = Hash.new
@rules = rules
end
def scan sku
price = @rules[sku]
if @basket.has_key?(sku) #I get NoMethodError: undefined method `has_key?' for nil:NilClass
@basket[sku] += 1
else
@basket[sku] = 1
end
@total += price
end
def total
@total
end
end
コードをそのまま実行すると、has_keyでnoMethodErrorが発生しますか?しかし、初期化でハッシュを作成すると、すべてが機能します。宣言時にハッシュを作成できないのはなぜですか?