ruby - 如何更新实例变量的值?
问题描述
我有一个类OrangeTree
和一个函数OneYearPasses
。这个函数应该将树的年龄和高度加一。
class OrangeTree
def initialize(height, age)
@height = height
@age = age
end
def age
@age
end
def height
@height
end
def OrangeHeight
puts "This Orange tree is #{height} unit tall"
end
def OneYearPasses
age =+ 1
height =+ 1
puts "This Orange tree is now #{age} years old and its height is now #{height}"
end
end
FirstOrangeTree = OrangeTree.new(0,0)
当我尝试增加它们时,它不会保存新值:
orangeOne = FirstOrangeTree.OneYearPasses
# >> This Orange tree is now 1 years old and its height is now 1
orangeOne = FirstOrangeTree.OneYearPasses
# >> This Orange tree is now 1 years old and its height is now 1
我猜它只会返回一个新副本。
我究竟做错了什么?
解决方案
你有两个问题。第一个是增加应该使用的任何东西:
var = var + 1
可能会缩短为
var += 1
不
var =+ 1
后者简单地读作
var = +1
另一个问题是你弄乱了 getter、实例变量和 [absent in your code] setter。您的age
方法读取变量的值。要设置它,应该设置实例变量的值:
@age += 1
或声明一个setter:
def age=(value)
@age = value
end
并如下所示使用它:
self.age += 1
self
以上是强制性的,否则,ruby 解释器将创建一个局部变量而不是调用 setter 方法。