Предпочтительный способ группировки служебных функций в Scala?

Каков наилучший способ группировки функций утилит, которые не принадлежат классу? В Ruby я бы сгруппировал их в модуле. Должен ли я использовать черты в Scala для того же эффекта или объектов?

Ответ 1

Обычно я помещаю функции утилиты, которые семантически различаются по различным признакам и создают объект для каждого признака, например.

trait Foo {
  def bar = 1
}
object Foo extends Foo

Таким образом, я наиболее гибкий. Я могу импортировать функции утилиты с помощью инструкции import или через with в объявлении класса. Более того, я могу легко сгруппировать разные служебные черты вместе в новый объект, чтобы упростить операции импорта для наиболее часто используемых функций полезности, например.

object AllMyUtilites extends Foo with Foo2

Ответ 2

Пакет объектов или просто простых объектов.

См., например, Scala.Predef и scala.math.

Ответ 3

Черты, если вы хотите, чтобы их смешивали с классами, которые будут использовать его. Объекты, если вы хотите импортировать их только.