2012-02-29 15 views

Respuesta

11

Puede hacerlo programmaticaly desde la consola:

import java.io.FileOutputStream 
import scala.Console 

Console.setOut(new FileOutputStream("<output file path>")) 

a partir de ahora todos los print y println se dirigirían en este archivo

+0

'setOut' no funciona en 2.9 REPL debido a [SI-4793] (https://issues.scala-lang.org/browse/SI-4793). Ver [mi respuesta] (http://stackoverflow.com/questions/7219316/println-vs-system-out-println-in-scala/7219519#7219519) – 4e6

+1

Aunque no es perfecto, estoy aceptando que esto es lo más respuesta útil. Noto que a veces no hay nada en el archivo hasta que salgo de REPL. Para evitarlo, se almacena el 'FileOutputStream' en un' val' y luego se invoca 'close' para vaciar el contenido del archivo. – Gigatron

4

No está claro por su pregunta exactamente cómo desea utilizar tal cosa . Un ejemplo de lo que estás tratando de hacer podría ser útil.

Aquí hay una función implícita que agregará un operador simple que escribe cualquier objeto como una Cadena en un archivo. (Tenga en cuenta que estoy usando >> en el sentido de estilo Unix desde >> ya ha significado en la Scala ("menos"). Puede reemplazar esto con algún otro operador si lo desea.)

implicit def anyToFileOutput(self: Any) = new { 
    import java.io._ 
    def >>(filename: String) { 
    val f = new BufferedWriter(new FileWriter(filename)) 
    try { 
     f.write(self.toString) 
    } finally { 
     if (f != null) 
     f.close() 
    } 
    } 
} 

Usted haría utilizar de esta manera:

scala> List(1,2,3) >> "out.txt" 

que produce un archivo, "out.txt" en el directorio de trabajo que contiene List(1, 2, 3)

+0

Esto es lo que estoy tratando de hacer, por ejemplo, si llamo 'calculateSomething (a, b, c)' que devuelve una lista de 'Int's, lo ideal sería que dirija' print' y 'println' declaraciones dentro de 'calculateSomething' a un archivo, y también enviar el resultado de la lista devuelta a un archivo. – Gigatron

0

Parece estar funcionando bien para mí:

[email protected]:~/github/scala (master)$ scala -e "println(2 * 2)" > output 
[email protected]:~/github/scala (master)$ cat output 
4 
+1

Gracias, pero eso está en la línea de comandos del SO, no dentro de una sesión REPL en ejecución. – Gigatron

+1

@Gigatron Simplemente genere cadenas en lugar de imprimir, y luego es fácil de enviar a los archivos. Por otra parte, si mostró lo que pretende lograr en lugar de preguntar cómo implementar su solución deseada, todos podríamos ser mucho más útiles. –

Cuestiones relacionadas