0

私は c#/.net に慣れているので、タイプセーフな背景を持っています。ルビーを使用しています。プライベートな(必要に応じて保護された)コンストラクターを持つクラス(ClassA)を作成したいと思います。その理由は、すべての ClassA オブジェクトのインスタンス化を制御する Factory (FactoryModule::create) を作成したいからです。これは Ruby では絶対確実 (?) ではないことはわかっていますが、コードとテストに基づいて ClassA を FactoryModule::create メソッドでインスタンス化する必要があることは明らかであるため、少なくともコードは自己文書化されます。ModuleFactory::create メソッドで、ClassA コンストラクターの可視性を public に変更し、オブジェクトをインスタンス化してから、可視性を private に戻そうとしましたが、A) エラーが発生し、B) ずさんでスレッドセーフではありません。何かご意見は?

更新の回答:

https://gist.github.com/gangelo/5551902

4

2 に答える 2

1

クラスの外部からプライベート (または保護された) メソッドを呼び出したい場合は、 を使用できますsend。したがって、工場では次のようなものを使用できます。

instance = ClassA.send(:create)
于 2013-05-10T00:49:43.820 に答える