Ленивая оценка также имеет некоторые накладные расходы для созданного функционального объекта. Если ваш объект сообщения уже полностью создан (статическое сообщение), эти издержки не нужны.
Подходящий метод для вашего варианта использования будет в стиле sprintf:
assert(a == b, "%s is not equal to %s", a, b)
Пока есть специализированная функция
assert(Boolean, String, Any, Any)
эта реализация не имеет накладных расходов или стоимости массива var args
assert(Boolean, String, Any*)
для общего случая.
Реализация toString оценивается лениво, но не читается:
assert(a == b, new { override def toString = a + " is not equal to " + b })