2012-03-21 22 views
7

Estoy leyendo un libro sobre la programación scala (la Programación en Scala), y tengo una pregunta sobre la sintaxis de rendimiento.scala - sintaxis de rendimiento

Según el libro, la sintaxis para el rendimiento se puede expresar como: de cláusulas dió cuerpo

pero cuando trato de ejecutar la secuencia de comandos a continuación, el compilador se queja de demasiados argumentos para getNombre

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? 
    } 

Entonces, mi pregunta es ¿cuál es la parte del "cuerpo" de la sintaxis de rendimiento, cómo usarla?

Respuesta

16

En breve, cualquier expresión (incluso que esa Unidad de retorno), pero debe incluir esa expresión en los soportes o simplemente dejarlas caer hacia abajo (sólo funciona con una sola expresiones de los estados):

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

código anterior trabajo (pero sin ningún sentido):

scalaFiles: Array[Unit] 

la siguiente opción es:

for(...) yield file.getName 

y como propina, se puede reescribir su comprensión de esa manera:

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

Ah, lo tengo! ¡Gracias por tu respuesta! –

-1

Es posible que quiera probar este del lovely post por 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) } } }

Cuestiones relacionadas