如何在 ruby 中更改 class 中的实例变量

how to change instance variables in class in ruby

我有一些遗留代码,对 Ruby 来说是全新的。我想在 Ruby.

中更改 class 实例的值
class CoffeeMachine
  attr_reader :water
  def initialize
    @water = 100
  end
end
machine = CoffeeMachine.new
machine.water

我现在想将 machine.water 更改为 70。我了解到这些实例是通过一种叫做“封装”的东西来保护的。但我想知道是否没有任何方法可以更改此变量。在 this and this 之后,我尝试像这样更改它:

machine.class_eval {@water = 70}

但它不起作用。当我这样打印出来时

puts machine.class_eval '@water' 它显示 70 但是当我在我的程序中使用它时它不知何故没有被存储。

在您的场景中,这将是更方便的处理方式

class CoffeeMachine
  attr_reader :water
  def initialize(water=100)
    @water = water
  end
end
machine = CoffeeMachine.new

machine.water # 100

machine = CoffeeMachine.new(70)

machine.water # 70

正如@Surya 所建议的,也可以这样做:

    class CoffeeMachine
      attr_accessor :water
      def initialize
        @water = 100
      end
    end

然后这样做:

   machine = CoffeeMachine.new
   machine.water #100
 
   machine.water = 70
   machine.water #70