私は「任意の属性の定義」が好きで、ルビーのOpenStructはハッシュを使用するよりもクリーンに感じることがあると思いますが、OpenStructを単に使用するよりも良い選択にする他の特定の利点やユースケースがあるかどうかについて興味がありますハッシュ。
2 に答える
OpenStruct
オブジェクトは、特定のメソッド呼び出しインターフェイスに適合するものが必要な場合(つまり、#name
とに応答するダックタイプのオブジェクトを送信する#value
場合)、または実装の詳細をカプセル化したいが、ソリューションの過剰なエンジニアリングを避けたい場合に役立ちます。それらは素晴らしいスタブオブジェクトも作成し、スタブ/モックのオーバーヘッドが必要ない場合は、フレームワークスタブの代わりにそれらを使用することがよくあります。
これは主にパフォーマンスの決定に帰着すると思います。Rubyドキュメントから:
OpenStructは、Rubyのメソッドルックアップ構造を利用して、プロパティに必要なメソッドを検索および定義します。これは、メソッドmethod_missingおよびdefine_methodによって実現されます。
ハッシュまたは構造体を使用する場合と比較して、これらのプロパティの設定にははるかに多くのオーバーヘッドがあるため、作成されるオブジェクトのパフォーマンスに懸念がある場合は、これを考慮する必要があります。
さらに、のようなものにHash
は、それが提供するすべてのメソッド(、、など)を備えた追加機能がありhas_key?
ますinclude?
。これOpenStruct
は、その観点からは非常に単純なオブジェクトですが、パフォーマンスの観点からは何の懸念もなく、簡単なオブジェクトで作業したい場合OpenStruct
は、良い選択です。