2012-02-20 83 views
2

我有一个红宝石模块,其中包含许多其他模块。这里有一个简单的例子:模块内的红宝石模块

module Foo 

    module Bar 
    end 

    module Baz 
    end 

end 

除了,我喜欢6-7模块里面的Foo模块。有没有一种方法可以将Bar/Baz放在单独的文件中,但仍然可以获得相同的行为?现在我的所有代码都在1个文件中,非常无组织。

回答

13

可以定义他们这样,在每一个单独的文件:

# foo.rb 
module Foo 
end 

# foo_bar.rb 
module Foo::Bar 
end 

# foo_baz.rb 
module Foo::Baz 
end 

NB。您需要定义Foo模块,然后能够使用此表示法定义模块,如Foo::Bar

或者你可以把他们在不同命名的文件中,他们目前是在格式,它应该仍然工作:

# foo_bar.rb 
module Foo 
    module Bar 
    end 
end 

# foo_baz.rb 
module Foo 
    module Baz 
    end 
end 
+0

啊,真棒!谢谢。 – 0xSina 2012-02-20 12:46:57

+0

没问题!乐意效劳。 – Russell 2012-02-20 12:48:15

+1

@Pragma一次注意,如果你已经使用'module Foo'定义了'Foo',那么你只能使用'module Foo :: Bar',否则你会得到一个错误。 – matt 2012-02-20 13:14:34