0

我正在尝试以下代码;

(for (f <- (new File(".")).listFiles() if !f.isDirectory) yield f) match {
  case x:File => println(x.getAbsoluteFile)
  case _ => println(_)
}

显然我错了,因为我收到以下错误

scrutinee is incompatible with pattern type;
 found   : java.io.File
 required: Array[java.io.File]
    case x:File => println(x.getAbsoluteFile)
           ^

我试图做的事情很明显。我试图从 for 循环中获取每个产生的值并将其传递给匹配案例“过滤器”。我对编写更好的文件树过滤器并不感兴趣,而不是知道我得到错误的原因以及是否可以修复它(或以其他方式重写)。

干杯!

4

1 回答 1

2

就在几个符号之外:

for (f <- (new File(".")).listFiles() if !f.isDirectory) f match {
  case x:File => println(x.getAbsoluteFile)
  case _ => println(_)
}

差异是

yield f)
{ f 

在您的情况下,您首先处理(列出|过滤|一个接一个)整个集合,然后才匹配整个结果。

于 2013-08-22T16:38:50.520 回答