繁体   English   中英

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

[英]What is the purpose of `@ins << lambda` in this code?

在下面列出的第一种方法中,use方法对我来说看起来像: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

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

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

<<是数组推送运算符。 因此,这@ins lambda推送到称为@ins的数组(或至少类似数组的东西)上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM