是否有可接受的方法将多个模块声明放在同一行上?

时间:2010-09-30 18:25:50

标签: ruby

我正在开发一个代码库,它有许多嵌套4或5深的模块。现在,这导致我们的代码从一开始就大量缩进。

是否有一种可以接受的方式将多个模块声明放在同一行上?

例如,

module A
  module B
    #do stuff
  end
end

有没有办法让它像这样?

module A::B
  #do stuff
end

虽然上一个块不起作用,但我能够让下一个块工作,但是我不确定这是否被认为是可接受的代码构造。

module A module B
  #do stuff
end end

4 个答案:

答案 0 :(得分:2)

您可以在Ruby源文件中安全地使用;而不是\nend之前的换行符并不重要。

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那样使用重要的空格(尽管如果缩进看起来很糟糕,它可以为你提供警告),所以如果你不想这样做,你就不能缩进代码。它只是让代码更难阅读。

顺便提一下,您可能需要检查四个或五个级别的模块是否表示代码异味。