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

发布于 2024-08-04 20:32:18 字数 733 浏览 0 评论 0 原文

在下面列出的第一个方法中,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

In the first method listed below, the use method, it looks to me like :ins is an instance variable and attr is a method that provides getters and setters for :ins. What I'm not sure is what the @ins << lambda does.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

2024-08-11 20:32:18

@ins 是一个包含数组的实例变量。数组支持运算符<<,它将一个项目附加到数组的末尾。例如:[1, 2] << 3 结果为[1, 2, 3]lambda 是一个 创建 Proc< /a>.

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

@ins is an instance variable which contains an Array. Arrays support the operator <<, which appends an item to the end of the array. For example: [1, 2] << 3 results in [1, 2, 3]. lambda is a method which creates a Proc.

So, to summarize: this code takes a block, creates a Proc out of it, and appends it to @ins.

离旧人 2024-08-11 20:32:18

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

<< is the array push operator. So this is pushing a lambda onto an array (or at least something array-like) called @ins.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文