这种情况有效:
Seq(fromDir, toDir) find (!_.isDirectory) foreach (println(_))
Run Code Online (Sandbox Code Playgroud)
然而,这不是:
Seq(fromDir, toDir) find (!_.isDirectory) foreach (throw new Exception(_.toString))
Run Code Online (Sandbox Code Playgroud)
编译以此错误结束:
error: missing parameter type for expanded function ((x$4) => x$4.toString)
Run Code Online (Sandbox Code Playgroud)
现在,如果我这样写它再次编译:
Seq(fromDir, toDir) find (!_.isDirectory) foreach (s => throw new Exception(s.toString))
Run Code Online (Sandbox Code Playgroud)
我相信有合理的解释;)
区别在于是_代表整个参数,还是表达式的一部分.根据具体情况,它属于以下两个类别之一:
Seq(fromDir, toDir) find (!_.isDirectory) foreach (println(_))
Run Code Online (Sandbox Code Playgroud)
翻译成
Seq(fromDir, toDir) find (!_.isDirectory) foreach ((x$1) => println(x$1))
Run Code Online (Sandbox Code Playgroud)
Seq(fromDir, toDir) find (!_.isDirectory) foreach (throw new Exception(_.toString))
Run Code Online (Sandbox Code Playgroud)
翻译成
Seq(fromDir, toDir) find (!_.isDirectory) foreach (throw new Exception((x$1) => x$1.toString))
Run Code Online (Sandbox Code Playgroud)