首页 > 解决方案 > 如何更新实例变量的值?

问题描述

我有一个类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

我猜它只会返回一个新副本。

我究竟做错了什么?

标签: rubyinstance-variables

解决方案


你有两个问题。第一个是增加应该使用的任何东西:

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


推荐阅读