2016-08-27 1 views
4
줄리아의

반복이 세 기능이 반복 인터페이스를 구현하여 새로운 정의 유형을 달성 할 수 있습니다 start, next줄리아 반복 : 시작은, 다음, 수행 부작용

done 나는에는 느낌표를 볼 수 없습니다 그 기능의 끝 그래서 julia 명명 규칙에 대한 나의 이해에서이 3 가지 기능은 그들의 주장을 수정하면 안된다. 특히이 두 루프는 동일한 출력을 제공해야합니다.

state = start(iter) 
while !done(iter, state) 
    (i, state) = next(iter, state) 
    @show i 
end 


state = start(iter) 
while !done(iter, state) 
    (other_i, other_state) = next(iter, state) 
    (i, state) = next(iter, state) 
    @show i 
end 

내가 잘못 했습니까? 나는이 것을 존중하지 않는 외부 줄리아 패키지의 일부 반복자에 부딪 혔기 때문에 물어 본다. 당신이 반복자를 다시 사용할 수 있습니다 아마도 때문에

+2

일반적으로 iterator는 어쨌든 변경할 수 없어야합니다. iteration은 위험한 사업이므로 반복되는 내용을 변경하는 것이 중요합니다. 따라서 반복 함수를 사용하는 것은 의미가 없습니다. 이론적으로'next' 함수는받은'state' 객체를 변형시킬 수 있고 단순히 새로운 상태를 반환하기보다는 다시 반환 할 수 있기 때문에 이름에'!'가 없다고 생각합니다 실제로'state' 객체는 직접적으로 다루어 져서는 안되지만'for' 문과 마찬가지로'next'와 마찬가지로 내부적으로 처리됩니다. 그래서 아마도 부족합니다! 일관성을 위해서입니다. –

+0

"불손한 행동"을 발견 한 패키지는 무엇입니까? : p –

+0

설명해 주셔서 감사합니다. @ TaosPapastylianou. 꾸러미에 대해 걱정하지 마라, 그것은 고쳐질 것이다. –

답변

7

가능하면 (영어가 모국어가 아닌에주의, 느낌표 같은 것은 없다), 그 기능은 반복자를 (변이 안되는 등의 반복자 상태가 복사 할 수 있고 재사용). 그러나 그러한 디자인이 불가능하거나 상당한 성능 저하가있는 경우에만 눈에 띄는 몇 가지 예가 있습니다. 이것의 좋은 예는 (각 반복은 다음 produce 문까지 실행) 반복자입니다 Base.Task입니다 : 우리가 일반적으로 돌연변이로 잘 봤는데 그 경우

julia> collect(@async for i = 1:10 
     produce(i) 
     end) 
10-element Array{Int64,1}: 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 

(반복 프로토콜 물론 어떤 사용하지만 그 캐시 상태는 작동하지 않을 것입니다). 함수 끝의 느낌표는 관례이지만 어떤 식 으로든 적용되지는 않습니다 (입력 인수의 변형에 엄격히 제한되지 않고 프로그래머가 알고 있는지 확인하려는 부작용이 있음) .

+0

'Base.Eachline'은베이스의 변형 반복자의 또 다른 대표적인 예입니다. –

+0

이것이 맞습니다. 약간의 것을 정교하기 위해, 일부 객체는 자연스럽게 우리가 돌연변이를 고려하지 않은 상태 변화를 지원합니다. 예를 들어 파일로부터의 읽기는 파일 위치를 갱신하지만, 우리는'read!'라는 이름을 사용하지 않습니다. 이러한 경우에는 돌연변이가 올바른 개념으로 보이지 않습니다. –

3

그 방법은 하지는 자신의 주장을 수정해야합니다, 당신은 느낌표 마크에 대해 말이 맞아.

맞습니다. 관례는 을 추가하는 것입니다! 메소드 이름에 그들은! 나는 또한 패키지 건너 한

해당 인수, 다음 방법을 사용 ProgressMeter 패키지 수정하면()와 하나는

이 진행 미터 유형을 변경 않는다가 자네 말이 맞아, 그렇게 말한다 박사를, 나는 개발자가이

TL과 일치하는 (내가 다른 곳에서 줄리아에서 유래 나 알고하지 않습니다) 그러나 확실하게 그것의 중요한 느낌표의 아이디어를 좋아하지 문서에서, 그리고 요점을 실제로 강조하기 위해, 그것을 상세하게 묘사하는 부분은,210

+0

명시 적으로 형식을 사용하여 루프를 작성해야한다는 것의 의미는 무엇입니까? 또는 for 문이 다음을 존중하겠습니까? 나는 어떻게 든 이것을 의심한다! –

+0

내가 무슨 말하는지 이해가 안 되니? ProgressMeter 패키지를 언급하고 있습니까? 또는 다른 무엇인가 – isebarn

+0

나는 내가 포장을 보지 않고 있었다고 고백한다. 그러나,'next()'함수는'for' 문에 의해 내부적으로 사용됩니다, 맞습니까? 'next '함수를 정의하는 것은'for' 문에서 반복자를 사용하는 데 어떻게 도움이됩니까? 'for' 문이'next!()'함수를 찾나요? 아니면 내가하는 말을 오해 했니? –