Первый стиль называется mixin
, раньше он был несколько популярен.
Его можно заменить следующим кодом:
object SomeOtherStuff {
def someMethod(): String
}
object SomeObj {
import SomeOtherStuff._
//now someMethod is available
def otherMethod(): String = someMethod + "!"
}
object Caller {
import SomeObj._
import SomeOtherStuff._
//utility methods from both objects are available here
}
Плюсы миксинов:
Если SomeTrait
расширяет 10 других миксинов, то расширение этой черты позволит отказаться от 10 import
операторов
Минусы миксинов:
1) создает ненужную связь междучерты
2) неудобно использовать, если вызывающий не расширяет сам миксин
Избегать миксины для кода бизнес-логики - безопасный выбор.
Хотя яизвестно о 2 допустимых случаях использования:
1) импорт DSL, например, код ScalaTest:
class SomeSuite extends FunSuite with BeforeAndAfter {...}
2) работа (как автора библиотеки) с неявными параметрами: например, object Clock extends LowPriorityImplicits
(https://github.com/typelevel/cats-effect/blob/master/core/shared/src/main/scala/cats/effect/Clock.scala#L127)