【问题标题】:Ruby private methodRuby 私有方法
【发布时间】:2013-11-10 18:25:03
【问题描述】:

我正在研究 ruby​​,不知何故,我将一些方法定义为私有方法,但出现错误:“类的未定义方法私有......”。我在下面发布了我的代码。任何帮助或建议都可以!谢谢你:)

代码:

class Bot
attr_reader :name

def initialize(options)
    @name = options[:name] || "Unnamed Bot"
    begin
        @data =  YAML.load(File.read(options[:data_file]))
    rescue
        raise "Could not load bot data"
    end

    private

        def random_response(key)
            random_index = rand(@data[:responses][key].length)
            @data[:responses][key][random_index].gsub(/\[name\]/, @name)
        end

        def greeting
            random_response :greeting
        end

        def farewell
            radnom_response :farewell
        end

        def response_to(input)
            prepared_input = preprocess(input).downcase
        end

        def preprocess(input)
            perform_substitutions input
        end
end 
end

错误:

【问题讨论】:

  • 您的所有方法都在此代码 sn-p 的构造函数中定义。

标签: ruby methods private


【解决方案1】:

您的私有方法是类构造函数的一部分(initialize 方法);它们应该在其他方法之外定义。

【讨论】:

    【解决方案2】:

    虽然缩进在 Ruby 中并不重要,但在查找代码中的问题时跟踪缩进非常有用,因此请养成始终如一的习惯。每个缩进使用两个空格并将制表位设置为 2。

    这是您的代码一致缩进:

    class Bot
      attr_reader :name
    
      def initialize(options)
        @name = options[:name] || "Unnamed Bot"
        begin
          @data =  YAML.load(File.read(options[:data_file]))
        rescue
          raise "Could not load bot data"
        end
    
        private
    
        def random_response(key)
          random_index = rand(@data[:responses][key].length)
          @data[:responses][key][random_index].gsub(/\[name\]/, @name)
        end
    
        def greeting
          random_response :greeting
        end
    
        def farewell
          radnom_response :farewell
        end
    
        def response_to(input)
          prepared_input = preprocess(input).downcase
        end
    
        def preprocess(input)
          perform_substitutions input
        end
      end 
    

    请注意,由于 end 关闭到您的 rescue 块,您的 def initialize 方法错过了 end。此外,您的方法嵌入在 initialize 中,它是如何突出的?

    【讨论】:

      猜你喜欢
      • 2015-12-08
      • 2012-05-19
      • 2013-05-06
      • 1970-01-01
      • 2017-09-17
      • 2011-05-16
      • 2010-09-24
      • 2019-03-10
      • 1970-01-01
      相关资源
      最近更新 更多