2017-08-27 8 views
0

サンプルプログラムを実行しています:ファイルのリストからファイル名のリストを追加しています。しかし、追加した後は空のリストを取得しています。要素を追加しないスカラーリスト

私のコードはこれです:

val regex = """(.*\.pdf$)|(.*\.doc$)""".r 
val leftPath = "/Users/ravi/Documents/aa" 

val leftFiles = recursiveListFiles(new File(leftPath), regex) 
var leftFileNames = List[String]() 

leftFiles.foreach((f:File) => {/*println(f.getName);*/ f.getName :: leftFileNames}) 

leftFileNames.foreach(println) 

def recursiveListFiles(f: File, r: Regex): Array[File] = { 
    val these = f.listFiles 
    val good = these.filter(f => r.findFirstIn(f.getName).isDefined) 
    good ++ these.filter(_.isDirectory).flatMap(recursiveListFiles(_, r)) 
} 

最後の文は、コンソールには何も表示されません。

答えて

1

f.getName :: leftFileNamesleftFileNamesの先頭にf.getNameを追加し、それがleftFileNamesに追加されませんので、新しいListを返すことを意味します。ので、あなたたとえば、あなたは同様に、すべての操作の後leftFileNamesを割り当てる必要があります:

leftFiles.foreach((f:File) => leftFileNames = f.getName :: leftFileNames) 

が、それはScalaの変更可能な変数を使用しない方が良いでしょう、それはあなたができる、副作用の原因になりますですこのためreversemapを使用して、同じよう:@chengpohi

val leftFileNames = leftFiles.map(_.getName).reverse 
+0

おかげで、それが働いています。 – Sun

関連する問題