2013-07-20 4 views
0

Ce sont mon code de test:mode Intermède en charge imbriquée

1.rb:

module M 
    A = 'Outer Constant' 
    class C 
    A = 'Inner Constant' 
    end 
    class M 
    class C 
     A="Inner Constant 2" 
    end 
    end 
end 

2.rb

load('1.rb') 

3.rb

load('2.rb', true) 
puts String.class 
puts M::A 

Lorsque Je cours ruby 3.rb, il revient:

class 
Outer Constant 

Je pense qu'il devrait déclencher une erreur à cause de load('', true), mais ce n'est pas le cas. S'il vous plaît dites-moi pourquoi.

Répondre

0

Le comportement de la méthode est Kernel#load quel que soit le contexte, il apparaît. Même si 2.rb est chargé de 3.rb en mode wrap, qui n'a aucun effet sur la façon dont 1.rb est chargé dans 2.rb. 1.rb est chargé sans mode wrap, et donc sous l'espace de noms ordinaire, ce qui signifie M::A est appelable de 3.rb.

+1

Mais 1.rb est chargé dans 2.rb, et 2.rb est en mode wrap, pourquoi le mode wrap n'a pas d'effets sur 1.rb. – user2428918

+0

Vous ne semblez pas comprendre ce que j'ai écrit. Voilà comment cela fonctionne. – sawa

+0

pourquoi avez-vous écrit de cette façon, celui qui a demandé de l'aide, lui-même n'est pas compréhensif? Cette boîte de commentaires est pour demander les clarifications .. et chaque fois que quelqu'un le fera, vous n'avez pas besoin d'être grossier .. –

Questions connexes