在下面列出的第一个方法中,使用方法,它看起来像: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
答案 0 :(得分:5)
@ins
是一个包含数组的实例变量。数组支持运算符<<
,它将项附加到数组的末尾。例如:[1, 2] << 3
会产生[1, 2, 3]
。 lambda
是method which creates a Proc。
因此,总结一下:此代码采用一个块,从中创建一个Proc,并将其附加到@ins
。
答案 1 :(得分:2)
<<
是数组推送运算符。所以这就是将lambda推到一个名为@ins
的数组(或至少类似于数组的数组)上。