2009-09-10 59 views
0

在下面列出的第一種方法中,使用方法在我看來很像:ins是一個實例變量,attr是爲ins提供getter和setter的方法。我不確定的是@ins << lambda的功能。此代碼中@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 

回答

5

@ins是一個包含數組的實例變量。數組支持運算符<<,它將一個項目附加到數組的末尾。例如:[1, 2] << 3結果爲[1, 2, 3]lambdamethod which creates a Proc

因此,總結一下:這段代碼需要一個塊,創建一個Proc,並將其附加到@ins

2

<<是數組推式運算符。所以這是將一個lambda推到一個數組上(或者至少是類似數組的數組),稱爲@ins

相關問題