2012-03-21 20 views
7

Czytam książkę o programowaniu scala (programowanie w Scali) i mam pytanie dotyczące składni zbiorów.scala - składnia kompilacji

Według książki, składnia dla plonu można wyrazić następująco: klauzul uzyskując ciało

ale gdy próbuję uruchomić skrypt poniżej, kompilator narzeka na zbyt wiele argumentów dla getName

def scalaFiles = 
    for (
    file <- filesHere 
    if file.isFile 
    if file.getName.endsWith(".scala") 
) yield file.getName { 
    // isn't this supposed to be the body part? 
    } 

tak, moje pytanie brzmi, co jest częścią "ciała" składni plonów, jak z niej korzystać?

Odpowiedz

16

Wkrótce każdy wyraz (nawet, że jednostka powrót), ale należy ująć tego wyrażenia w nawiasach lub po prostu upuść je w dół (działa tylko z jednego wyrazu Statement):

kod
def scalaFiles = 
    for (
    file <- filesHere 
    if file.isFile 
    if file.getName.endsWith(".scala") 
) yield { 
    // here is expression 
    } 

powyżej woli praca (ale bez sensu):

scalaFiles: Array[Unit] 

Następna opcja to:

for(...) yield file.getName 

i jako wskazówka, można przepisać do zrozumienia tak:

def scalaFiles = 
     for (
     file <- filesHere; 
     if file.isFile; 
     name = file.getName; 
     if name.endsWith(".scala") 
    ) yield { 
     name 
     } 
+0

Ah, I got it! Dziękuję za odpowiedź! –

-1

może chcesz spróbować tego z lovely post przez Zach Cox

def files(rootDir: File)(process: File => Unit) { for (dir <- rootDir.listFiles; if dir.isDirectory) { for (file <- dir.listFiles; if file.isFile) { process(file) } } }

Powiązane problemy