На самом деле действительно не хватает контекста. Возможно в задании были какие-то подробности, указывающие на правильный,
с точки зрения задания, способ. Так как
строки в Scala это строки из java, то к ним применяются все те же правила.
Если вы используете `+` то, например вот такое выражение не вызовет ошибки:
scala> "one" + null + 42
res0: String = onenull42
то есть при конкатенации строки с значениями других типов, эти значения за сценой переводятся к строке (вызывается метод toString())
С другой стороны
concat, принимает только строки:
scala> "" concat null
java.lang.NullPointerException
at java.lang.String.concat(String.java:2027)
... 33 elided
scala> "" concat 42
<console>:11: error: type mismatch;
found : Int(42)
required: String
"" concat 42
^
С точки зрения производительности, строки в java (и как следствие в Scala) - imutable и оператор
+ при конкатенации каждый раз создает новую строку, что при конкатенации большого количества строк конечно же не очень эффективно и метод
concat будет работать быстрее в такой ситуации. С другой стороны компилятор способен оптимизировать простые случаи использования оператора
+ и конвертировать их с использованием
StringBuilder (который mutable) и он в свою очередь более производительный чем concat.
В общем и целом, если в задании был намек на необходимость конкатенации большого количества строк и чувствительность к производительности, то необходимо было использовать
StringBuilder. Если же необходимо было показать более scala way, то возможно лучшим вариантом было бы использовать
интерполяцию:
scala> val (one, two, three) = (1, "two", null)
one: Int = 1
two: String = two
three: Null = null
scala> s"$one $two $three"
res11: String = 1 two null