2012-03-21 15 views
7

Sto leggendo un libro sulla scala di programmazione (la programmazione in Scala), e ho una domanda sulla sintassi del rendimento.scala-yield syntax

Secondo il libro, la sintassi per la resa può essere espresso come: clausole cedere corpo

ma quando provo ad eseguire lo script di seguito, il compilatore lamenta troppi argomenti per 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? 
    } 

quindi, la mia domanda è qual è la parte "corpo" della sintassi di rendimento, come utilizzarla?

risposta

16

Poco, qualsiasi espressione (anche quella che l'Unità di ritorno), ma si deve racchiudere l'espressione nelle staffe o semplicemente cadere giù (funziona solo con un singolo espressioni dichiarazione):

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

codice qui sopra lavoro (ma senza alcun senso):

scalaFiles: Array[Unit] 

opzione successiva è:

for(...) yield file.getName 

e come un suggerimento, è possibile riscrivere il vostro per la comprensione del genere:

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

Ah, ho capito! Grazie per la tua risposta! –

-1

È possibile, come di provare questo dalla lovely post da 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) } } }

Problemi correlati