モデル オブジェクトのセットとラッパー オブジェクトのセットを用意して、追加機能を提供します。
モデル オブジェクトのコレクションをラッパー オブジェクトに簡潔に変換できるようにしたいと考えていますList("x", "y", "z").foreach(println)
。
class Model
class ModelWrapper(val m: Model)
object ModelWrapper { def apply(model: Model) = new ModelWrapper(model) }
val m1 = new Model; val m2 = new Model; val m3 = new Model
List(m1, m2, m3).map(ModelWrapper)
そのModelWrapper
ため、引数として渡された はModelWrapper(_)
、コンパニオン オブジェクトの呼び出しである に変換されます。
ただし、これを試すと、次のようなタイプの不一致エラーが発生します。
<console>:14: error: type mismatch;
found : ModelWrapper.type (with underlying type object ModelWrapper)
required: Model => ?
List(m1, m2, m3).map(ModelWrapper)
ただし、 を作成ModelWrapper
しcase class
てコンパニオン オブジェクトを削除すると、機能します。追加する動作が、ケース クラスが機能する全体的な方法にうまく適合しないため、ケース クラスにしたくありません。たとえば、パラメーターとして同じモデル クラスを持つ 2 つのラッパー クラスは、必ずしも等しいとは限りません。
私が知りたいのは、この場合のケース クラスとコンパニオン オブジェクトの違いは何ですか? ケースクラスを使わずに欲しいものを手に入れることはできますか?