我正在学习一个教育网站上的教程。问题是视频是2009年的(Ruby 1.8),有些信息可能已经过时了。
讲师说你需要同时使用getter/setter方法来访问实例变量,但一个简单的测试显示并非如此:
class Carnivore
def noise(noise)
@noise = noise
end
end
carnivore = Carnivore.new
puts noise = "roar" #will output "roar"
我不确定我是否在我的setter方法中做了一些错误的事情,它让我访问实例变量,当它理想情况下不应该。让我困惑的是,我的导师给我展示了一个没有getter和setter方法的程序。
在我看来,上述情况之所以有效,是因为a)我的setter方法被不正确地设置,或者b) Ruby的版本更改允许设置setter,然后在没有getter的情况下访问。
所以我想我的问题是,你需要getter和setter方法来访问实例变量吗?
puts noise = "roar"
这一行与前面的行无关——与类肉食动物无关,与实例肉食动物无关。它创建了一个局部变量noise(并输出它)。开始尝试
puts carnivore.noise
首先,当我们讨论setter
时它应该定义为:
def noise=(arg)
@noise = arg
end
和getter
:
def noise
@noise
end
所以,结果是:
class Carnivore
def noise=(noise)
@noise = noise
end
def noise
@noise
end
end
在您的示例中,您创建了class Carnivore
的instance
,并在=之后调用方法:puts来定义变量noise