2009-09-10 6 views
0

Dans la première méthode listée ci-dessous, la méthode use, elle me ressemble: ins est une variable d'instance et attr est une méthode qui fournit des getters et setters pour: ins. Ce que je ne suis pas sûr, c'est ce que fait le @ins << lambda.Quel est le but de `@ins << lambda` dans ce code?

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 

Répondre

5

@ins est une variable d'instance qui contient un tableau. Les tableaux prennent en charge l'opérateur <<, qui ajoute un élément à la fin du tableau. Par exemple: [1, 2] << 3 donne [1, 2, 3]. lambda est un method which creates a Proc. Donc, pour récapituler: ce code prend un bloc, en crée un Proc et l'ajoute à @ins.

2

<< est l'opérateur poussé du tableau. Donc, cela pousse un lambda sur un tableau (ou au moins quelque chose de type tableau) appelé @ins.

Questions connexes