我正在学习编程,因此决定尝试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方法,它将无法正常工作。
婷婷同学_
TA贡献1844条经验 获得超8个赞
当然,它们都返回一个值,但是它们的行为是不同的。
假设已经有一个成员@a
。
使用getter,@a
无需修改即可获取的当前值。
使用二传手,可以修改@a
并获取其新值作为返回值。
在考虑二传手的行为时,请注意:
@a的旧值无法使用setter获取,并被覆盖。
setter返回的内容实际上是在调用setter之前就已经知道的。
- 3 回答
- 0 关注
- 671 浏览
添加回答
举报
0/150
提交
取消