gpt4 book ai didi

ruby - Rack 在其中间件中为每个提供什么

转载 作者:数据小太阳 更新时间:2023-10-29 08:09:02 26 4
gpt4 key购买 nike

我在 railscasts 上看到了以下代码:

def each(&block)
block.call("<!-- #{@message}: #{@stop - @start} -->\n") if @headers["Content-Type"].include? "text/html"
@response.each(&block)
end

我想知道 &block 是从哪里来的?这里发生了什么?

最佳答案

&block 是在 Ruby 中定义一个方法的方法,它接受一个方法并将 block 显式分配给 & 引用的变量。

具体来说,这段代码做了什么,它接受一个 block ,调用 block 传递一个字符串作为参数,然后将 block 传递给内部响应。

乍一看,我会说你看到的具体中间件基本上就是注入(inject)字符串

"<!-- #{@message}: #{@stop - @start} -->\n"

如果请求内容类型是"text/html",则进入HTTP响应体,这意味着一个HTTP页面。

如果请求是针对 HTTP 页面的,则会提供响应并注入(inject)该字符串。否则,如果请求是针对另一种文件(例如二进制文件、文本文件、javascript 等),则将在不进行任何修改的情况下提供响应。

下面的例子将帮助你更多地理解&block的范围

def foo(&block)
puts "foo"
bar(&block)
end

def bar(&block)
puts "bar"
block.call
end

foo do
puts "block"
end

# => foo
# => bar
# => block

另请注意,保存 block 的变量可以命名为任何名称,不是必需的 block

def foo(&my_block)
puts "foo"
bar(&my_block)
end

def bar(&another_block)
puts "bar"
another_block.call
end

foo do
puts "block"
end

# => foo
# => bar
# => block

关于ruby - Rack 在其中间件中为每个提供什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20751148/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com