2013-08-22 32 views
0

我正在试验下面的代码;用For循环产生并传递到匹配表达式

(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循环中获取每个赋值,并将其传递给匹配“filter”。我在写一个更好的文件树过滤器时并不感兴趣,而不知道我得到的错误的原因,以及是否有可能修复它(或者以其他方式重写)。

干杯!

回答

2

只是一些符号远:

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

的差异是

yield f) 
{ f 

你的情况,你是第一个处理(上市|过滤|产生一个接一个)全收集和只有匹配全部结果。