假设我在parser.rb
中有一个解析器模块(app/lib
):
module Parsers
class XMLParser
def self.parse
"Parsing XML...."
end
end
class TXTParser
def self.parse
"Parsing TXT...."
end
end
end
我见过有人在这样叫课:
@parse_xml = ::Parsers::XMLParser.parse
@parse_txt = ::Parsers::TXTParser.parse
代替:
@parse_xml = Parsers::XMLParser.parse
@parse_txt = Parsers::TXTParser.parse
两种方法都起作用,所以有什么区别?另外,我看到了将模块拆分为多个文件的情况,例如:
在app/lib/parsers/xml_parser.rb
内部:
module Parsers
class XMLParser
def self.parse
"Parsing XML...."
end
end
end
在app/lib/parsers/txt_parser.rb
内:
module Parsers
class TXTParser
def self.parse
"Parsing XML...."
end
end
end
两个选项之间是否有任何区别(除了明显的……是较小的文件)?
答案 0 :(得分:1)
两种方法都起作用,所以有什么区别?另外,我看到了将模块拆分为多个文件的情况,例如:
::
允许您定位根级别范围。默认情况下,ruby会搜索您所在的当前作用域树。我知道这听起来很含糊,但是有一个示例可以清楚地说明这一点:
module A
module B
def self.test
A::C.test
D::B.test
::D::B.test
end
end
module C
def self.test
p "calling A::C"
end
end
module D
module B
def self.test
p "calling A::D::B"
end
end
end
end
module D
module B
def self.test
p "calling D::B"
end
end
end
A::B::test
这将打印:
"calling A::C"
"calling A::D::B"
"calling D::B"
两个选项之间是否有任何区别(除了明显的……是较小的文件)?
这两种方法都一样。通常,在ruby中,您对每个文件进行一个类定义,并以该类命名。因此,您会更经常看到两个文件的版本,我建议将其用作样式,但这并不重要。