У меня был фрагмент кода, который выглядит следующим образом:
val foo = df.map(parser.parse) // def parse(str: String): ParsedData = { ... }
Однако я обнаружил, что передает лямбду в Scala, которая захватывает this
, я полагаю, код, обработанный Scala выше, в:
val foo = df.map(s => /* this. */parser.parse(s))
где мое намерение пройти легкий захват.В Java я бы сделал parser::parse
, но это не доступно в Scala.
Это помогает:
val tmp = parser // split val read from capture; must be in method body
val foo = df.map(tmp.parse)
, но делает код немного более неприятным.Существует ответ @ tiago-henrique-engel, который можно использовать как:
val tmp = parser.parse _
val foo = df.map(tmp)
, но для этого все еще требуется временное значение.
Итак, есть лиспособ передать облегченный захват в map
, не сохраняя его сначала в некоторый val
, чтобы сохранить код чистым?