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

时间:2009-09-10 17:37:57

标签: 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

2 个答案:

答案 0 :(得分:5)

@ins是一个包含数组的实例变量。数组支持运算符<<,它将项附加到数组的末尾。例如:[1, 2] << 3会产生[1, 2, 3]lambdamethod which creates a Proc

因此,总结一下:此代码采用一个块,从中创建一个Proc,并将其附加到@ins

答案 1 :(得分:2)

<<是数组推送运算符。所以这就是将lambda推到一个名为@ins的数组(或至少类似于数组的数组)上。