scala> import collection.breakOut
import collection.breakOut
scala> def foo: NodeSeq = data.map { s => <x>{s}</x> }(breakOut)
foo: scala.xml.NodeSeq
Карта методов на самом деле имеет два списка аргументов.Первый принимает функцию, которую вы передали.Второй принимает объект CanBuildFrom, который используется для создания компоновщика, который затем строит возвращаемую последовательность.Этот аргумент неявный, поэтому обычно компилятор заполняет его для вас.Он принимает 3 параметра типа: From, T, To.Существует несколько предопределенных последствий (в том числе в объекте NodeSeq), но ни один из них не соответствует From = Array, T = Node, To = NodeSeq.
breakOut решает эту проблему: это универсальный метод, который возвращает экземпляр CanBuildFrom путемпоиск неявного CanBuildFrom [Nothing, T, To].Согласно неявным правилам поиска, любой CanBuildFrom, который соответствует T, To и имеет From> Nothing, является приемлемым.В этом случае: canBuildFrom в объекте Array