在我眼里,这个:
class Lifeforms::Animals::Person
# stuff goes here
end
看起来比这更具可读性:
module Lifeforms
module Animals
class Person
# stuff goes here but it's all indented
end
end
end
但似乎我看到的所有代码都使用了后面的方法。这有什么特别的原因吗?一个问题是模块可能没有被定义......但对我来说,即使这比最后一个例子更好:
# Just make sure the modules exist
module Lifeforms
module Animals
end
end
class Lifeforms::Animals::Person
# stuff goes here
# and it doesn't all have to be deeply indented
end
人们为什么要这样做呢?我是唯一一个认为深度嵌套使代码更难阅读的人吗?
答案 0 :(得分:3)
如果我们举个例子,并“翻转”它:
module Lifeforms::Animals::Person
# stuff goes here
# and it doesn't all have to be deeply indented
end
module Lifeforms
module Animals
end
end
失败了
NameError: uninitialized constant Lifeforms
“嵌套”语法定义模块,如果它不存在,但“::”语法依赖于事实,模块存在。
已回答类似问题here。
答案 1 :(得分:3)
我同意,有时我会使用:: syntax。但请注意,对于两种语法,恒定分辨率的语义是不同的,因此它们并不完全等效:
module A; module B; module C; end ;end ;end
module A; A_CONST=42; end
module A::B::C; puts A_CONST; end
#^ NameError: uninitialized constant A::B::C::A_CONST
module A
module B
module C
puts A_CONST
end
end
end
#^ prints 42