【问题标题】:In the latest version of Ruby, is having both getter and setter methods necessary to access instance variables?在最新版本的 Ruby 中,是否需要同时拥有 getter 和 setter 方法才能访问实例变量?
【发布时间】:2016-11-05 06:38:37
【问题描述】:

我正在学习教育网站上的教程。问题是该视频来自 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 方法来访问实例变量吗?

【问题讨论】:

    标签: ruby


    【解决方案1】:
    puts noise = "roar" 
    

    这一行与前几行无关 - 与 Carnivore 类无关,与实例 carnivore 无关。它创建一个局部变量噪声(并打印它)。开始尝试

    puts carnivore.noise
    

    【讨论】:

      【解决方案2】:

      所以,让我们开始吧,首先,当我们谈论 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

      【讨论】:

        猜你喜欢
        • 2020-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-29
        相关资源
        最近更新 更多