`@ins << 的目的是什么?这段代码中的 lambda` ?
在下面列出的第一个方法中,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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
@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
.<<
是数组推送运算符。因此,这是将 lambda 推入一个名为@ins
的数组(或至少是类似数组的东西)上。<<
is the array push operator. So this is pushing a lambda onto an array (or at least something array-like) called@ins
.