Написав несколько инструментов scala, я пытаюсь справиться с лучшим способом упорядочить свой код - особенно подразумевается. У меня есть 2 цели:
- Иногда я хочу иметь возможность импортировать только те запросы, которые я запрашиваю.
- В других случаях я хочу просто импортировать все.
Чтобы избежать дублирования имплицитов, я придумал эту структуру (аналогично тому, как устроен scalaz):
case class StringW(s : String) {
def contrived = s + "?"
}
trait StringWImplicits {
implicit def To(s : String) = StringW(s)
implicit def From(sw : StringW) = sw.s
}
object StringW extends StringWImplicits
// Elsewhere on Monkey Island
object World extends StringWImplicits with ListWImplicits with MoreImplicits
Это позволяет мне просто
import StringW._ // Selective import
или (в большинстве случаев)
import World._. // Import everything
Как все это делают?