为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

眼眸繁星 2019-10-19 16:34:54
我正在学习编程,因此决定尝试Ruby。我确定这是一个愚蠢的问题,但是讲师在谈论setter和getter方法,对此我感到困惑。这是示例:class Human  def noise=(noise)    @noise = noise  end  def noise    @noise  endend由此,该类被实例化,我可以将其输出:man = Human.newman.noise=("Howdie!")puts man.noise这导致 Howdie!现在让我感到困惑的是,讲师说如果没有getter方法(这两个方法中的第二个),就无法与实例变量@noise进行交互。但是当我删除getter方法时,我仍然可以访问@noise,请参见示例:class Human  def noise=(noise)    @noise = noise  endendman = Human.newputs man.noise=("Howdie!")这与使用getter方法时的工作原理相同。所以现在我很困惑。为什么需要吸气剂?如果没有实例变量,教员意味着什么呢?他可能正在使用旧版本的Ruby吗?在此先感谢您的帮助。
查看完整描述

3 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

代码行


puts man.noise=("Howdie!")

不使用getter方法,因此不需要定义getter方法即可工作。该行仅使用setter方法。setter方法的返回值自动等于等号右侧的值,因此“ Howdie!” 被传给puts。


代码行


puts man.noise

确实使用getter方法,如果删除getter方法,它将无法正常工作。


查看完整回答
反对 回复 2019-10-19
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

当然,它们都返回一个值,但是它们的行为是不同的。

假设已经有一个成员@a 。

使用getter,@a无需修改即可获取的当前值。

使用二传手,可以修改@a并获取其新值作为返回值。

在考虑二传手的行为时,请注意:

  1. @a的旧值无法使用setter获取,并被覆盖。

  2. setter返回的内容实际上是在调用setter之前就已经知道的。


查看完整回答
反对 回复 2019-10-19
  • 3 回答
  • 0 关注
  • 618 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信