2014-10-24 4 views
0

clojure의 변수에 시계를 추가하고 리 바인드하면 시계가 동적으로 업데이트됩니다.LightTable Clojure 시계가 Atom에서 업데이트되지 않음

(def x "jlkfds") 
x 

위의 예에서 x는 항상 그 값을 반영합니다.

그러나 원자를 사용하여이 작업을 시도하면 운이 없습니다. instarepl이나 watch에 반영되도록 변경 사항을 다시 수행해야합니다.

(defonce y (atom 10)) 
@y *38* 
(swap! y inc) *80* 

위의 예에서는 deref를 실행하지 않고 스왑을 실행했기 때문에 동기화되지 않았습니다.

나를 혼란스럽게 한 것은 누군가 (Chris)가 마우스 포인터의 좌표를 동적으로 변경하는 것을 볼 수있는 Javascript 데모를 보았습니다. 나는이 기능을 가지고 있다는 생각을 정말 좋아한다. Clojure에서 같은 일을 할 수있는 방법이 있습니까?

좋아요?

http://youtube.com/watch?v=d8-b6QEN-rk

그들이보고있는 것은이 eval'd 때

답변

0

시계 만 업데이트 해 주셔서 감사합니다. 시계 매크로가 eval 된 수있는 곳을보고 있는지 확인하십시오. 이 시도.

(defonce y (atom 10)) 

(do //Eval this sexp 
    (swap! y inc) 
    @y) //watch this j 

난 당신도 주기적으로 전체 페이지를 평가합니다의 인스 타 - REPL (라이브 모드) 문제로 실행하고 생각하고 시계가 동기화 나가보고있는 곳이다. 예를 들어, 1 행이 평가되고 원자가 작성됩니다. 시계를 2 행에 추가하여 평가합니다. 3 번 라인으로 28 번 시계를 올린 다음 2 번 라인을 다시 평가하도록하십시오. 그러면 시계가 y의 새 값으로 업데이트됩니다. 3 번 라인을 재평가해도 2 번 라인의 시계는 바뀌지 않지만 y의 값은 바뀝니다.

+0

나는 그들이보고있는 것이 eval'd 일 때만 시계가 업데이트된다는 것을 분명히 알게되었지만 나는 clojure : 에서 다음과 같은 것을 원한다 : http://www.chris-granger.com/2013/08/22/light-table-050/ https://www.youtube.com/watch?v=d8-b6QEN-kr – rhlvora

+0

@rhlvora, ... http : //swannodette.github을 찾을 수 있습니다. .io/2014/02/27/눈 감아주기/재미있는 것. –

+0

@rhlvora 라이트 테이블 _does_ 당신에게 그것을 제공합니다. 이 비디오에서 편집기의 맨 아래에있는 이벤트 리스너가 foo 함수를 호출합니다. 일반 Clojure에서 이와 비슷한 작업을 수행하려면 감시 된 값을 설정하는 함수를 계속 호출하는 일종의 마우스 움직임 수신기가 필요합니다. – gvickers

관련 문제