我有一段看起来像这样的代码:
val foo = df.map(parser.parse) // def parse(str: String): ParsedData = { ... }
但是,我发现将lambda传递给捕获this
的Scala,我想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提供的answer可以这样使用:
val tmp = parser.parse _
val foo = df.map(tmp)
但是它仍然需要一个临时值。
因此,有没有一种方法可以将轻量级捕获传递给map
而又不先将其存储到某些val
中以保持代码干净?