Ruby:对象的update属性

时间:2014-08-03 22:23:24

标签: ruby ruby-on-rails-3 pass-by-reference

我在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

1 个答案:

答案 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