0

ruby を勉強していますが、どういうわけか、いくつかのメソッドをプライベートとして定義すると、「undefined method private for class ...」というエラーが表示されます。以下にtmyコードを投稿します。どんな助けや提案もします!ありがとうございました :)

コード:

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

0

Ruby ではインデントは重要ではありませんが、インデントを追跡することは、コードの問題を探すときに非常に役立ちます。したがって、インデントを一貫して行うことを習慣にしてください。インデントごとに 2 つのスペースを使用し、タブストップを 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 に答える