在最新版本的Ruby中,访问实例变量是否需要getter和setter方法?
我在一个教育网站上学习教程。问题是视频来自2009年(Ruby 1.8),一些信息可能已经过时 讲师说您需要使用getter/setter两种方法来访问实例变量,但一个简单的测试表明,情况并非如此:在最新版本的Ruby中,访问实例变量是否需要getter和setter方法?,ruby,Ruby,我在一个教育网站上学习教程。问题是视频来自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方法是否做错
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"
这一行与前面的行没有任何关系-与类Carnivore无关,与实例Carnivore无关。它会创建局部变量噪波(并打印)。开始试验
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
在您的示例中,您创建了类食肉动物的实例,并且after=您调用了方法:put来定义变量噪声