2014-10-23 2 views
1

scalaz stream 웹 사이트에서이 코드를 사용합니다. 메소드와 함께 작동하지만 추가를 사용하려고하면 오류가 발생하여 무한 루프처럼 보이고 끝나지 않습니다. append 메서드를 사용하려는 이유는 메서드에 사용하여 파일을 다시 작성하지 않아야하기 때문입니다.scalaz stream io에서 append 메소드를 사용하면 무한 루프가 발생합니다.

io.linesR(t) 
    .intersperse("\n") 
    .pipe(text.utf8Encode) 
    .to(io.fileChunkW(target)) 
    .run.run //success 

files.foreach(t => { 
     io.linesR(t) 
     .intersperse("\n") 
     .pipe(text.utf8Encode) 
     .append(io.fileChunkW(target)) 
     .run.run 
    }) //the program keeps running, it looks like in an infinite loop 

내가 누군가에 대한 파일에 추가되지

+0

친절한 제안을 - API 문서 [온라인 여기 (http://docs.typelevel.org를 읽어 보시기 바랍니다 /api/scalaz-stream/stable/latest/doc/#scalaz.stream.Process) 질문을하기 전에. 문서들은'append'는 하나의 프로세스를 실행하는 일반적인 함수이며 파일과는 아무런 관련이 없다고 말합니다. 이름이 당신이 하려던 것과 일치하기 때문에 전적으로 다른 것을 한 것처럼 생각할 수도 있습니다. :) 물론 문서가 명확하지 않은 경우에는 꼭 물어보십시오! – pchiusano

답변

2

'추가'사전에 여기

많은 덕분에 일이 무엇인지 나에게 설명 할 수있는, 그것에 대해 혼란 스러워요, 그것은 하나 개의 프로세스를 추가하는 연결자이다 다른 사람에게. 나는 당신이 정말로 당신의 경우에 추가로 무엇을 얻는 지 말할 수 없다. 뭔가 이상하다. 나는 ByteVector => Task [Unit]의 무한한 스트림을 얻는다 고 생각한다. 그래서 그것이 결코 완료되지 않는 이유 다.

당신은 당신이 이런 식으로 작업을 수행 할 수 있습니다 예를 들어, 사용자 정의 fileChunkW 방법이 필요합니다

def appendFileChunkW(f: String, bufferSize: Int = 4096, append: Boolean = true): Sink[Task,ByteVector] = 
    io.chunkW(new BufferedOutputStream(new FileOutputStream(f, append), bufferSize)) 

files.foreach(t => { 
     io.linesR(t) 
     .intersperse("\n") 
     .pipe(text.utf8Encode) 
     .to(appendFileChunkW(target)) 
     .run.run 
    }) 
+0

nice, thanks for that –

+0

그런 것이 scalaz-stream에 있으면 좋을 것 같습니다. –

+0

@ FrankS.Thomas 내가 PR https://github.com/scalaz/scalaz-stream/pull/263을 제출했습니다. –

관련 문제