Обычно я помещаю служебные функции, которые семантически различаются, в разные черты и создаю объект для каждой черты, например,
trait Foo {
def bar = 1
}
object Foo extends Foo
Таким образом, я самый гибкий. Я могу импортировать служебные функции через оператор import
или через with
в объявлении класса. Более того, я легко могу сгруппировать различные свойства утилиты в новый объект, чтобы упростить операторы импорта для наиболее часто используемых функций утилиты, например,
object AllMyUtilites extends Foo with Foo2