如何更新实例变量的值?
How can I update the value of an instance variable?
我有一个 class 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
我猜它只是 returns 一个新副本。
我做错了什么?
你有两个问题。第一个是增加任何应该使用的东西:
var = var + 1
可能会缩短为
var += 1
不要
var =+ 1
后者简单读作
var = +1
另一个问题是你弄乱了吸气剂、实例变量和[代码中没有] setter。您的 age
方法 读取变量 的值。要设置它,应该设置实例变量的值:
@age += 1
或声明一个setter:
def age=(value)
@age = value
end
并如下所示使用它:
self.age += 1
上面的 self
是强制性的,否则 ruby 解释器将创建一个局部变量而不是调用 setter 方法。
我有一个 class 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
我猜它只是 returns 一个新副本。
我做错了什么?
你有两个问题。第一个是增加任何应该使用的东西:
var = var + 1
可能会缩短为
var += 1
不要
var =+ 1
后者简单读作
var = +1
另一个问题是你弄乱了吸气剂、实例变量和[代码中没有] setter。您的 age
方法 读取变量 的值。要设置它,应该设置实例变量的值:
@age += 1
或声明一个setter:
def age=(value)
@age = value
end
并如下所示使用它:
self.age += 1
上面的 self
是强制性的,否则 ruby 解释器将创建一个局部变量而不是调用 setter 方法。