Новые конструкторы для классов с богатой упаковкой Scala (неявная) - PullRequest
4 голосов
/ 18 июля 2011

В Scala вы можете «добавлять новые методы» в существующие классы, создав класс-оболочку и используя «неявный def» для преобразования из исходного класса в расширенный класс-оболочку.

У меня есть библиотека Java дляГрафика, которая использует множество конструкторов с длинными списками с плавающей точкой.Я хотел бы добавить новые конструкторы в эти классы с богатой упаковкой, но это, похоже, не работает как методы, описанные выше.Другими словами, я хотел бы иметь более простые конструкторы, но при этом продолжать использовать оригинальные имена классов, а не некоторые имена классов-оболочек, но в настоящее время я не вижу других вариантов.

Идеи?

Ответы [ 2 ]

2 голосов
/ 18 июля 2011

Похоже, вы хотите использовать фабричные методы apply (...) Scala, которые вы встраиваете в объект-компаньон для вашего класса.

Например, если у вас есть:

class Foo(val bar: Int, val baz: Int) {
  ... class definition ...
}

Вы можете добавить (в том же файле):

object Foo {
  def apply(bar: Int) = new Foo(bar, 0)
}

Имея это в виду, создать новый экземпляр Foo, просто предоставив параметр bar, так же просто, как и

val myBar = 42
val myFoo = Foo(myBar) // Note the lack of the 'new' keyword.

Это приведет к тому, что myFoo будет назначен экземпляр Foo, где bar = 42, а baz = 0.

0 голосов
/ 01 октября 2011

Да, вам нужна комбинация подхода Pimp my Library и фабричного метода .

...