0

我正在研究 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

错误:

4

2 回答 2

4

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

于 2013-10-30T22:15:36.107 回答
0

虽然缩进在 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了您的方法。此外,您的方法嵌入其中,它是如何脱颖而出的?def initializeendrescueinitialize

于 2013-10-31T00:13:12.547 回答