尝试学习/理解Ruby setter和getter方法

我正在学习编程,因此决定尝试Ruby。我确定这是一个愚蠢的问题,但是讲师在谈论setter和getter方法,对此我感到困惑。这是示例:


class Human

  def noise=(noise)

    @noise = noise

  end


  def noise

    @noise

  end

end

由此,该类被实例化,我可以将其输出:


man = Human.new

man.noise=("Howdie!")

puts man.noise

这导致 Howdie!


现在让我感到困惑的是,讲师说如果没有getter方法(这两个方法中的第二个),就无法与实例变量@noise进行交互。


但是当我删除getter方法时,我仍然可以访问@noise,请参见示例:


class Human

  def noise=(noise)

    @noise = noise

  end

end


man = Human.new

puts man.noise=("Howdie!")

这与使用getter方法时的工作原理相同。


所以现在我很困惑。为什么需要吸气剂?如果没有实例变量,教员意味着什么呢?他可能正在使用旧版本的Ruby吗?


在此先感谢您的帮助。


眼眸繁星
浏览 623回答 3
3回答

牛魔王的故事

代码行puts man.noise=("Howdie!")不使用getter方法,因此不需要定义getter方法即可工作。该行仅使用setter方法。setter方法的返回值自动等于等号右侧的值,因此“ Howdie!” 被传给puts。代码行puts man.noise确实使用getter方法,如果删除getter方法,它将无法正常工作。

婷婷同学_

当然,它们都返回一个值,但是它们的行为是不同的。假设已经有一个成员@a 。使用getter,@a无需修改即可获取的当前值。使用二传手,可以修改@a并获取其新值作为返回值。在考虑二传手的行为时,请注意:@a的旧值无法使用setter获取,并被覆盖。setter返回的内容实际上是在调用setter之前就已经知道的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Ruby