3

私は Ruby を初めて使用しますが、いくつかのソース コードを調べています。いくつかのソースコードで以下に示すような構造に出くわしました(モジュールの名前、実際のクラスではないクラス)

module ModuleOne

class MyClass

module CommonModule

# code ....

end # module CommonModule

end # class MyClass

end # module ModuleOne

またはこの例

module ModuleOne

  class MyClass

    class MyClassTwo

#code  ............

  end #class MyClassTwo

    end #class MyClass

      end #module ModuleOne

これまでの読書から、クラスをモジュールにラップすることについては知っていますが、上記のようなラップの種類 (モジュール内のモジュールやクラス内のクラスなど) については聞いたことがありません。質問してもよろしいですか 1. これは良い習慣であり、一般的に行われていますか? 2. このようにコードを構造化する利点は何ですか?

コメントやポインタをありがとう

デイブ

4

1 に答える 1

4

ネストは定数をカプセル化するために行われ、モジュールは特殊なケースです。つまり、名前空間に使用されます。特定のモジュールのコンテキスト内でのみ特定のモジュールにアクセスできるようにする場合は、ネストを行う必要があります。そうすることで、そのモジュールはデフォルトで外部からアクセスできなくなります。そのためには、名前空間にプレフィックスを付ける必要があります。入れ子の層が多すぎたり、モジュール本体が長いとコードが追いづらくなるので、名前空間ごと書くのが良い方法です。

module ModuleOne
  ...
end

class ModuleOne::MyClass
  ...
end

class ModuleOne::MyClass::MyClassTwo
  ...
end
于 2013-03-08T11:38:48.320 に答える