rails 定名空间(转)   
               添加时间:2013-5-10 点击量: 
 
              转载 http://blog.csdn.net/ruby_cn/article/details/187360
 一般来说,在模块定一种定义一个类使得这个类能在本身自力的namespace里。如许你的类就不会因为和其它模块中的类重名而出题目,比如:
  module Foo
    class Joy
       def initialize(one, two)
           puts one: [#{one}] two: [#{two}]
       end
    end
  end
  module Bar
    class Joy
      def initialize(something)
         puts Do #{something} already!
      end
    end
  end
如许的话,你就不克不及如许定义Joy类了:
  Joy.new(a, b)
  
因为你的当前namespace中没有Joy这个类,然则,你可以如许定义:  
 
  Foo::Joy.new(a, b)
或者
  Bar::Joy.new(a crossword puzzle)
因为Joy在模块Foo和Bar中都定义了。
作为一个模块的编写者,或者一些类似的类,你可能会把它们放到一个模块定义中。然则作为模块的应用者,每次都敲这么多字母可能斗劲烦人,一个办法是可以用别号:
  Joy = Foo::Joy
  然后,你就可以用这个别号了:
 
  Joy.new(a, b)
  
  另一个解决办法就是应用‘include’:
  include Foo
  如许,就可以直接应用Joy而不必写全Foo::Joy了。
 
  而
  include Bar
可以让你直接应用Joy而不必写全Bar::Joy了。
  然则,若是你若是写了上方两个include语句,那么Joy将指向最后一个独一的可能的对象,比如:
  include Foo
  include Bar
那Joy将指向Bar::Joy。然则,若是你再写上
  include Foo
 Joy还是将指向Bar::Joy。
   这种简介体式格式也有必然严格的感化域请求。若是你在一个类的定义中指了然include一个模块,那么这个模块的对象的简单写法只在这个类中有效;若是你在一个模块中指定了include语句,那么全部模块中都可以应用include中对象的缩写。
   若是没有指定namespace,那么默认为匿名namespace。并且,若是你想在一个文件中的变量等被外部可以或许应用(尤指其它文件),好将它定义在模块中。比如,文件foo.rb内容如下:
   var1=99
  在别的一个文件中,你想如许:
  require file1
  puts var1        
  将会失足:
  NameError: undefined local variable or method var1
  所以,好还是把var1定一到一个模块中。
我们永远不要期待别人的拯救,只有自己才能升华自己。自己已准备好了多少容量,方能吸引对等的人与我们相遇,否则再美好的人出现、再动人的事情降临身边,我们也没有能量去理解与珍惜,终将擦肩而过。—— 姚谦《品味》
                     
                  
     
  
 
    
    
转载 http://blog.csdn.net/ruby_cn/article/details/187360
一般来说,在模块定一种定义一个类使得这个类能在本身自力的namespace里。如许你的类就不会因为和其它模块中的类重名而出题目,比如:
  module Foo
    class Joy
       def initialize(one, two)
           puts one: [#{one}] two: [#{two}]
       end
    end
  end
  module Bar
    class Joy
      def initialize(something)
         puts Do #{something} already!
      end
    end
  end
如许的话,你就不克不及如许定义Joy类了:
  Joy.new(a, b)
  
因为你的当前namespace中没有Joy这个类,然则,你可以如许定义:  
 
  Foo::Joy.new(a, b)
或者
Bar::Joy.new(a crossword puzzle)
因为Joy在模块Foo和Bar中都定义了。
作为一个模块的编写者,或者一些类似的类,你可能会把它们放到一个模块定义中。然则作为模块的应用者,每次都敲这么多字母可能斗劲烦人,一个办法是可以用别号:
  Joy = Foo::Joy
  然后,你就可以用这个别号了:
 
  Joy.new(a, b)
  
  另一个解决办法就是应用‘include’:
include Foo
  如许,就可以直接应用Joy而不必写全Foo::Joy了。
 
  而
  include Bar
可以让你直接应用Joy而不必写全Bar::Joy了。
然则,若是你若是写了上方两个include语句,那么Joy将指向最后一个独一的可能的对象,比如:
  include Foo
  include Bar
那Joy将指向Bar::Joy。然则,若是你再写上
  include Foo
 Joy还是将指向Bar::Joy。
   这种简介体式格式也有必然严格的感化域请求。若是你在一个类的定义中指了然include一个模块,那么这个模块的对象的简单写法只在这个类中有效;若是你在一个模块中指定了include语句,那么全部模块中都可以应用include中对象的缩写。
   若是没有指定namespace,那么默认为匿名namespace。并且,若是你想在一个文件中的变量等被外部可以或许应用(尤指其它文件),好将它定义在模块中。比如,文件foo.rb内容如下:
   var1=99
  在别的一个文件中,你想如许:
  require file1
  puts var1        
  将会失足:
  NameError: undefined local variable or method var1
  所以,好还是把var1定一到一个模块中。




