У меня есть набор объектов модели и набор объектов-оберток, чтобы дать им дополнительную функциональность.Scala - использовать объект-компаньон как сокращенный аргумент для приема функции
Я хотел бы иметь возможность конвертировать коллекции типовых объектов обертки объектов сжато, используя то же сокращенное, что позволяет писать 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
, и удалить объект-компаньон, он работает. Я не хочу, чтобы это был класс case, поскольку поведение, которое оно добавляет, не очень хорошо сочетается с общим способом работы классов. Например, два класса-оболочки с тем же классом модели, что и параметр, не обязательно равны.
Что я хотел бы знать, в чем разница между классом case и сопутствующим объектом в этом случае? Могу ли я получить то, что хочу, не используя класс case?
Я бы открыл билет об этом. Поведение выглядит подозрительно непоследовательным. –
Я сделаю так ... – Russell