我正在开发一个代码库,它有许多嵌套4或5深的模块。现在,这导致我们的代码从一开始就大量缩进。
是否有一种可以接受的方式将多个模块声明放在同一行上?
例如,
module A
module B
#do stuff
end
end
有没有办法让它像这样?
module A::B
#do stuff
end
虽然上一个块不起作用,但我能够让下一个块工作,但是我不确定这是否被认为是可接受的代码构造。
module A module B
#do stuff
end end
答案 0 :(得分:2)
您可以在Ruby源文件中安全地使用;
而不是\n
。 end
之前的换行符并不重要。
module A ; module B
#do stuff
end end
或者例如:
def sqr x ; x*x end
等
答案 1 :(得分:2)
这样做,虽然有点顽皮:
class Module
def const_missing(m)
const_set(m, Module.new)
end
end
module A::B
def self.hello_my_friend
:hello_my_friend
end
end
A::B.hello_my_friend #=> :hello_my_friend
答案 2 :(得分:1)
我认为你自己已经回答了 - 你的第三部分看起来很糟糕。
但是,更重要的是,如果您确实写过module A::B
并且module A
之前从未定义过,那么您将隐式定义一个(空)module A
,而不是看起来很有用。而且,一旦您定义module A
一次,欢迎您撰写module A::B
来定义module B
。因此,对我来说,你不能使用你的第二个例子似乎很好。
答案 3 :(得分:1)
Ruby没有像Python那样使用重要的空格(尽管如果缩进看起来很糟糕,它可以为你提供警告),所以如果你不想这样做,你就不能缩进代码。它只是让代码更难阅读。
顺便提一下,您可能需要检查四个或五个级别的模块是否表示代码异味。