Scala захват метода поля без целого экземпляра - PullRequest
1 голос
/ 26 июня 2019

У меня был фрагмент кода, который выглядит следующим образом:

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, чтобы сохранить код чистым?

...