-
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
endmodule 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定一到一个模块中。