如何在 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
我有一些遗留代码,对 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