在最新版本的Ruby中,getter和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" 

这一行与前面的行无关——与类肉食动物无关,与实例肉食动物无关。它创建了一个局部变量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 Carnivoreinstance,并在=之后调用方法:puts来定义变量noise

最新更新