在这段代码中`@ins << lambda`的目的是什么?

uzo*_*uzo 0 ruby lambda

在下面列出的第一个方法中,使用方法,它看起来像:ins是一个实例变量,attr是一个为:ins提供getter和setter的方法.我不确定的是它的@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
Run Code Online (Sandbox Code Playgroud)

Pes*_*sto 5

@ins是一个包含Array的实例变量.数组支持运算符<<,该运算符将项附加到数组的末尾.例如:[1, 2] << 3结果[1, 2, 3]. lambda是一种创建Proc方法.

因此,总结一下:这段代码占用一个块,从中创建一个Proc,然后将其追加@ins.