我在Ruby中有这两个类:
Prod.rb
class Prod
attr_reader :code, :price
def initialize code, price
@code = code
@price = price
end
end
Buy.rb
class Buy
def initialize()
@items = []
end
def addToBasket item
@items << item
end
def changePrice
@items.each do |item|
item.price = 0.00
end
end
end
当我使用下面的代码测试应用时,我收到此错误指向上面的item.price = 0.00
:
test_1(MyTest): NoMethodError: undefined method 'price=' for #<Prod:0x24d76e8>
我可以打印item.price的值,但我无法更新它。有什么想法吗?
MyTest.rb
def setup
@prod1 = Prod.new("1", 19.95)
end
def test_1
b = Buy.new()
b.addToBasket(@prod1)
[...]
end
答案 0 :(得分:2)
这是因为您没有在班级price=
中定义Prod
方法。您只使用attr_reader :code, :price
定义了一个getter。如果要创建getter和setter,请在attr_accessor
类中设置用户Prod
:
class Prod
attr_accessor :code, :price
def initialize code, price
@code = code
@price = price
end
end
您可以在我的文章中了解有关红宝石中的getter和setter的更多信息:Ruby for Admins: Objects。