Какова цель `@ins << лямбда` в этом коде? - PullRequest
0 голосов
/ 10 сентября 2009

В первом перечисленном ниже методе use метод выглядит следующим образом: ins - это переменная экземпляра, а attr - метод, который предоставляет методы получения и установки: ins Что я не уверен, так это то, что делает @ins << lambda.

module Rack
  class Builder
    attr :ins
    def use(middleware, *args, &block)
      middleware.instance_variable_set "@rack_builder", self
      def middleware.rack_builder
        @rack_builder
      end
      @ins << lambda { |app|
        middleware.new(app, *args, &block)
      }
    end

    def run(app)
      klass = app.class
      klass.instance_variable_set "@rack_builder", self
      def klass.rack_builder
        @rack_builder
      end
      @ins << app #lambda { |nothing| app }
    end

    def leaf_app
      ins.last
    end
  end
end

Ответы [ 2 ]

5 голосов
/ 10 сентября 2009

@ins - переменная экземпляра, которая содержит массив. Массивы поддерживают оператор <<, который добавляет элемент в конец массива. Например: [1, 2] << 3 приводит к [1, 2, 3]. lambda - это метод , который создает Proc .

Итак, подведем итог: этот код берет блок, создает из него процесс и добавляет его к @ins.

2 голосов
/ 10 сентября 2009

<< - оператор массива. Таким образом, это толкает лямбда на массив (или, по крайней мере, что-то похожее на массив) с именем @ins.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...