2011-03-23 5 views
5

나는 라이 닝 엔 프로젝트를 설정했습니다. clojure 소스 파일 중 하나에서 일부 레코드를 정의했습니다. 내 작업 흐름은 보통 emacs를 시작하고 'lein swank'REPL에 연결하는 것입니다. REPL에 연결하면 적절한 네임 스페이스로 전환하고 C-c C-k 파일을 사용하므로 파일의 REPL 및 코드로 작업을 시작할 수 있습니다. 그러나, 내가 그 파일과 C-c C-k 레코드의 레코드를 변경하면 REPL은 변경 사항을 선택하지 않습니다.clojure REPL이 defrecord의 변경 사항을 선택하지 않습니다

그래서 레코드를 변경해야 할 때마다 나는 린 스웽크 프로세스를 멈추고 다시 시작한 다음 이맥스에서 다시 연결해야합니다. 이것은 매우 오래되어지고 있습니다. 내가 뭘 놓치고 있니? 나는 C-c C-k 대신 C-c C-l을 시도했지만 작동하지 않는다. 나는 프로젝트 루트에서 '클래스'디렉토리를 삭제하려고 시도했지만, 그럴 수도 있습니다.

통찰력이나 권장 사항을 알려 주시면 감사하겠습니다.

또한, 제쳐두고, 저는 레코드가 정의 된 네임 스페이스에서 항상 작업하고 있습니다.

편집 : 실제로 defrecord에서 프로토콜의 구현을 변경하고 있습니다. 일단 그것을 변경하고 C-c C-k를 사용하여 컴파일하고 REPL에 새로운 레코드를 만들면 REPL은 여전히 ​​이전 프로토콜 구현을 사용하고 있습니다.

+0

당신이에 붙여 넣을 수를 던졌습니다 repl에서 스 니펫을 사용하여 이전 값을 표시하고이를 변경 한 다음 새 값을 변경합니다. 나는 우리가 더 많은 것을 도울 수 있도록 문맥을 추가하는 데 도움이 될 것이라고 생각합니다. –

+0

@Arthur : 나는 이것을 더 분명하게해야했습니다. Defrecord에서 프로토콜의 구현을 변경하고 있습니다. 변경을 가하면 REPL은 레코드의 새 인스턴스를 만든 후에도 이전 구현을 사용하고 있습니다. – mofeeta

+0

Common Lisp에서만 나온 Slime/Swank를 알고 있습니다. 나는 개별 최상위 폼을 컴파일하기 위해'C-c C-c'를 사용하지 않는다는 것에 놀랐다. 그런데 REPL의 패키지와 디렉토리를 현재 파일과 포인트로 전환하는'C-c ~'가있다. – Svante

답변

4

필자는 예제를 사용할 수 있지만 레코드의 정의를 변경하고 변경 전의 레코드 일부를보고 있습니까?

repl에서 레코드의 인스턴스를 정의한 다음 defrecord를 변경하고 repl을 다시로드 한 다음 다른 이름으로 새 인스턴스를 만들면 사본과 그 차이점을 모두 볼 수 있습니다.

내가 (use :reload-all ... all the namespaces in my project ...) 다음 난 그냥이 파일과 다시로드 할 수 있습니다 호출 내 프로젝트에서 파일함으로써 혼란의이 종류를 피하려고 다시로드는 모두 이전 var에 바인딩 등