如何更新实例变量的值?

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 方法。