如何更新实例变量的值?

时间:2018-08-24 04:19:23

标签: ruby instance-variables

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

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

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

那里有两个问题。首先是增加应该使用的任何内容:

var = var + 1

可能会缩短为

var += 1

var =+ 1

后者简称为

var = +1

另一个问题是,您正在弄乱getter,实例变量和[代码中不存在的] setter。您的age方法读取变量的值。要设置它,应该设置实例变量的值:

@age += 1

或声明一个setter:

def age=(value)
  @age = value
end

并按如下所示使用它:

self.age += 1

self是强制性的,因为否则,ruby解释器将创建一个局部变量,而不是调用setter方法。