在最新版本的Ruby中,访问实例变量是否需要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方法是否做错

我在一个教育网站上学习教程。问题是视频来自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" 
这一行与前面的行没有任何关系-与类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来定义变量
噪声