2014-02-21 2 views
0

저는 정말 귀찮은 문제가 있습니다.TextIO.outputSubstr()은 아무 것도 쓰지 않습니다

이 기능 :

fun writeAFile() = 
    let 
    val outstream = TextIO.openOut "look_at_me_im_a_file.txt" 
    in 
    TextIO.outputSubstr(outstream,Substring.full("I'm so sad right now :(")) 
    end; 

그냥 파일 look_at_me_im_a_file.txt을 생성하지만 빈입니다. 오류가 발생하지 않으며 SML/NJ 또는 PolyML과 함께 작동하지 않습니다. 파일을 읽는 데 문제가 없습니다.

답변

1

우선 Substring.full은 필요하지 않습니다. 실제로 substring 유형의 것을 제공하는 것 외에는 아무 것도하지 않습니다. 대신, 당신은 할 수있다 : 이제

TextIO.output (outstream, "I'm so sad right now :("); 

는 이유는 작동하지 않습니다 :

당신이 파일에 무언가를 쓰기 SML에게

(TextIO.output 또는 TextIO.outputSubstr를 사용하여) 실제로하지 않습니다 바로 파일에 적어 라. 버퍼에 씁니다. 음, 때로는 파일에 즉시 글을 쓸 수는 있지만 자주 의존할만한 것은 아닙니다.

이제는이 방법이 대단히 비현실적 인 것처럼 보이지만 더 효율적입니다. 서로 작은 데이터 몇 개를 쓰면 하나의 쓰기 작업으로 모든 데이터가 함께 정리됩니다.

주위를 둘러 보는 방법은 sml에게 "안녕하세요, 정말로에게 쓰기를 원합니다."라고 말하면됩니다. TextIO.flushOut이라는 함수가 있습니다. 또는 스트림을 닫으면 모든 내용이 기록됩니다.

사실, 항상 스트림을 닫아야합니다. 열려있는 파일 핸들을 놓아 두는 것은 지저분합니다. 파일 시스템은 여러분이 파일 핸들을 다 끝냈다는 것을 어떻게 알 수 있으며, 다른 프로그램이 파일에 쓸 수있게 할 수 있습니까?

0

신인 난 우리의 강의 노트를 확인하지 않은 것 :/

코드의 기능 버전은 http://www.standardml.org/Basis/text-io.html의 온라인 문서 만에 모호한 참조를 제공한다는 자사의 주목할만한 비록

fun writeAFile() = 
let 
     val outstream = TextIO.openOut "look_at_me_im_a_file.txt" 
in 
    (
     TextIO.output(outstream,"I'm so glad right now :)"); 
     TextIO.closeOut(outstream) 
    ) 
end; 

입니다 output 기능. IMPERATIVE_IO에 대한 문서보고

그리고

string 실제로 유형 CharVector.vector이며, 따라서 output 기능에 대해 유효한 인수는 것을 비 명백한 때문에 혼란 val output : outstream * vector -> unit 말한다.

다른 신참 선수에게 도움이되기를 바랍니다.

관련 문제