에 내 질문에 내가 tutorial을 읽었으며 반응 프로그래밍 방법에 대해 배우고, 실험하고있는 반응성 패키지 https://github.com/JuliaLang/Reactive.jl직관적 동작은 Reactive.jl
에 관한 것이다. 나는 다음과 같은 코드를 시도하고 그것은 예상대로 작동 : 인쇄되는 590 (610) betwwen
using Reactive
x = Signal(100)
z = map(v -> v + 500, x; typ=Int64, init=500)
dar = rand(90:110,10)
for i in dar
push!(x, i)
println(value(z))
end
이 예상대로, 리드 (10)에 임의의 숫자 :
500
591
609
609
605
593
602
596
590
594
지금까지 너무 좋아. 이제, 각각의 갱신 이후에 신호 (Z)의 출력을 수집 할 가정 벡터 C로 말 :
using Reactive
x = Signal(100)
z = map(v -> v + 500, x; typ=Int64, init=500)
dar = rand(90:110,10)
c = Vector()
for i in dar
push!(x, i)
push!(c, value(z))
end
그러나 대신 벡터의 590과 610 사이의 열 난수를 갖는 C, C를 함유하는 벡터는 값 500 번 열 번 :
10-element Array{Any,1}:
500
500
500
500
500
500
500
500
500
500
이 동작이 내가 반작용 프로그래밍에 대해 이해하지 못하는 것이 원인인지 이해하려고합니다. 루프에 을 결합하면 및 신호은 아니오입니까? 이 문제의 원인에 대한 통찰력을 주셔서 감사합니다.
참고로 IJulia 노트북에서 Julia 0.4.5를 사용하고 있습니다.
대답이 아니지만 'push!'사이에'yield()'를 추가하는 것은 최소한의 변화로 작동합니다. 'z' 값의 업데이트는 다른 작업에서 발생합니다. –
'yield()'대신에 신호에'push! '뒤에'Reactive.run_till_now()'를 사용하십시오. 이 팁은 https://github.com/JuliaLang/Reactive.jl/issues/99 –
에서 작동합니다. 작동합니다. 감사합니다. 이것은 이런 식으로 일어날 것 같지 않지만 그것은 더 의미가 있습니다. – pyrex