Предположим, у меня есть класс значений
case class Id(i:Int) extends AnyVal
и последовательность, содержащая этот регистр значений
Seq(Id(1), Id(2), Id(3))
есть ли способ конвертировать эти значения в Int
, без необходимости в итерации по последовательности (например, с помощью Seq(Id(1), Id(2), Id(3)).map(_.i)
?
Причина, по которой я спрашиваю, состоит в том, что я думаю, что хорошая вещь в классах значений - это то, что вы можете использовать классы значений, которые имеют нативные типы в качестве представления во время выполнения и, следовательно, чрезвычайно эффективны. Но не все используемые библиотеки поддерживают автоматическое «преобразование» этих классов. Таким образом, нужно передать нативный тип, что не составляет большого труда, когда он является простым атрибутом, поскольку компилятор может его оптимизировать. Но когда у меня есть последовательность, я должен явно отобразить ее, что означает, что происходит ненужная итерация по всем значениям, потому что она на самом деле ничего не делает, кроме отображения на одни и те же значения во время выполнения. Есть ли способ избежать этого и использовать некоторые оптимизации компилятора в таких случаях?