sách gpt4 ăn đã đi

ruby-on-rails - "use"Ruby/Rails/Rack 代码中的关键字/词

In lại 作者:数据小太阳 更新时间:2023-10-29 06:35:34 29 4
mua khóa gpt4 giày nike

最近我在查看与goliath相关的一些代码时,偶然在Ruby代码中看到了这个词sử dụng。 , 中间件等。看起来它不同于bao gồm/extend, Và yêu cầu.

有人可以解释为什么存在这个 sử dụng 关键字,以及它与 bao gồm/yêu cầu 有何不同?它是如何工作的,何时使用它?

câu trả lời hay nhất

tài liệu

正如人们指出的那样,sử dụng 不是Ruby 关键字,它实际上是Rack::Builder lớp học 的一个方法。 :

use(middleware, *args, &block)

Specifies middleware to use in a stack.

This documentation ( pointed out by @user166390 ) 是这样描述的:

Rack::Builder implements a small DSL to iteratively construct Rack applications.

Ví dụ:

app = Rack::Builder.new {
use Rack::CommonLogger
use Rack::ShowExceptions
map "/lobster" do
use Rack::Lint
run Rack::Lobster.new
kết thúc
}

Or

app = Rack::Builder.app do
use Rack::CommonLogger
lambda { |env| [200, {'Content-Type' => 'text/plain'}, 'OK'] }
kết thúc

sử dụng adds a middleware to the stack, chạy dispatches to an application.

源代码

我不太熟悉 Rack::Builder source code , 但看起来每次你用一个新的中间件模块调用 sử dụng 时,它都会被添加到一个数组中,并且每个模块都按照添加它的相反顺序运行/注入(inject)(最后一个-先出顺序,又名堆栈顺序)。运行前一个中间件的结果通过inject传递给堆栈中的下一个中间件。 :

  1. Lines 53-56 :

    def initialize(default_app = nil,&block)
    # @use is parallel assigned to [].
    @use, @map, @run = [], nil, default_app
    instance_eval(&block) if block_given?
    kết thúc
  2. Lines 81-87 :

    def use(middleware, *args, &block)
    if @map
    mapping, @map = @map, nil
    @use << proc { |app| generate_map app, mapping }
    kết thúc
    # The new middleware is added to the @use array.
    @use << proc { |app| middleware.new(app, *args, &block) }
    kết thúc
  3. Lines 131-135 :

    def to_app
    app = @map ? generate_map(@run, @map) : @run
    fail "missing run or map statement" unless app
    # The middlewares are injected in reverse order.
    @use.reverse.inject(app) { |a,e| e[a] }
    kết thúc

其他资源

  1. A Quick Introduction to Rack .
  2. Ruby on Rack #2 - The Builder .

关于ruby-on-rails - "use"Ruby/Rails/Rack 代码中的关键字/词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11982310/

29 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress