2009-08-12 13 views
7

Piszę "skrypt" w Standard ML (SML/NJ), który ustawia środowisko interaktywne zgodnie z moimi upodobaniami. Ostatnią rzeczą, jaką robi skrypt, jest wydrukowanie komunikatu informującego, że wszystko poszło gładko. Zasadniczo, ostatnia linia jest taka:Ukryj wyjście "val it" w Standard ML

print "SML is ready.\n"; 

Kiedy uruchomić skrypt, wszystko idzie dobrze, ale interpreter SML wyświetla wartości zwracanej z druku funkcji.

SML is ready. 
val it =() : unit 
- 

Ponieważ mam tylko drukowanie coś na ekranie, w jaki sposób można powstrzymać z „Val go =(): unit” Wyjście więc wiadomość, że wszystko co widzę to „SML jest gotowy”, a następnie przez tłumacza skłonić?

Odpowiedz

10

Aby wyłączyć znak zachęty i odpowiedź SML-NJ, użyj następującego przypisania.

Compiler.Control.Print.out := {say=fn _=>(), flush=fn()=>()}; 
print "I don't show my type"; 

I don't show my type 

Chociaż nie widzę powodu, dla którego funkcja drukowania zwracająca typ jest zła.

Funkcja głosowa kontroluje, co jest drukowane.

Jest większy przykład w poniższym SML/NJ zauważa http://www.cs.cornell.edu/riccardo/prog-smlnj/notes-011001.pdf

Funkcja useSilently mogą być wykorzystane do załadowania pliku, ale bez wyświetlania żadnego wyjścia związanego z załadunkiem

fun useSilently (s) = let 
val saved = !Compiler.Control.Print.out 
fun done() = Compiler.Control.Print.out := saved 
in 
Compiler.Control.Print.out := {say = fn _ =>(), flush = fn() =>()} 
(use (s); done()) handle _ => done() 
end 

To jest zasadniczo zmieniając funkcję say, aby nic nie robić, a następnie ustawiając ją ponownie na końcu.

2

Użyj tego:

val _ = print "I don't show my type";