2012-02-29 27 views

Odpowiedz

11

Można to zrobić programmaticaly z konsoli:

import java.io.FileOutputStream 
import scala.Console 

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

odtąd wszystkich print i println będą kierowane do tego pliku

+0

'setOut' nie działa w wersji 2.9 REPL ze względu na [SI-4793] (https://issues.scala-lang.org/browse/SI-4793). Zobacz [moja odpowiedź] (http://stackoverflow.com/questions/7219316/println-vs-system-out-println-in-scala/7219519#7219519) – 4e6

+1

Chociaż nie jest doskonały, akceptuję to jako najbardziej przydatna odpowiedź. Zauważam, że w pliku nie ma nic, dopóki nie wyjdę z REPL. Aby obejść ten problem, należy zapisać 'FileOutputStream' w' val', a następnie wywołać 'close', aby opróżnić zawartość do pliku. – Gigatron

4

To jasne, z pytaniem, jak chcesz korzystać z takiego . Przykład tego, co próbujesz zrobić, może pomóc.

Oto niejawna funkcja, która doda prosty operator, który zapisuje dowolny obiekt jako ciąg do pliku. (Zauważ, że używam >> oznaczać stylu Unix > od > już ma sens w Scala („mniej niż”). Można zastąpić to z innego operatora, jeśli chcesz.)

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() 
    } 
    } 
} 

byś używać go tak:

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

który wytwarza plik „out.txt” w katalogu roboczym zawierającym List(1, 2, 3)

+0

To jest to, co próbuję zrobić - na przykład, jeśli nazywam 'calculSomething (a, b, c)', który zwraca listę 'Int's, idealnie byłoby kierować' print' i 'println' w pliku 'calculateSomething 'w instrukcjach, a także wysłać wynik zwracanej listy do pliku. – Gigatron

0

Wygląda, że ​​działa dobrze do mnie:

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

Dzięki, ale to w linii poleceń OS, a nie w działającej sesji REPL. – Gigatron

+1

@Gigatron Wystarczy wygenerować ciągi zamiast drukowania, a następnie można je łatwo wysłać do plików. Z drugiej strony, jeśli pokazałeś, co chcesz osiągnąć, zamiast pytać, jak wdrożyć pożądane rozwiązanie, wszyscy moglibyśmy być o wiele bardziej pomocni. –

Powiązane problemy