2015-01-27 2 views
2

이상한 문제입니다. 그래서 leinlein repl으로 REPL을 실행할 때 특정 네임 스페이스를로드하도록 지시받을 수 있습니다.Lein repl이 Clojure 스크립트를로드 한 후 네임 스페이스를 재설정합니다.

:repl-options {:init-ns ns1}

그리고, 예상대로, 그 파일을로드 : 좋아요,의 내 project.clj 파일이 라인을 포함, 그래서 내가 ns1.clj라는 파일이 있다고 가정하자. 그러나, 나는 ns1.clj 그것이 직업 수행 한 후 다른 네임 스페이스 (ns2)로 전환하려면, 그래서 추가 다음 ns1.clj에 :

(ns ns2)

문제는 Leiningen가 ns1.clj이 후 ns1에 REPL 네임 스페이스를 재설정한다는 것입니다 끝마친. ns1.clj을로드하고 네임 스페이스를로드하지 않고 REPL을 시작할 수있는 방법이 있습니까? 그건 그렇고, 나는 Leiningen이 스크립트를 실행하고 명시 적으로 네임 스페이스를 설정하지 않아야한다고 가정합니다.

배경 : clj 스크립트를로드 한 다음 해당 스크립트로 외부 소스에서로드 된 네임 스페이스로 전환하고 싶습니다. 따라서 ns1.clj의 논리는 REPL이 시작해야하는 네임 스페이스를 파악합니다.

+0

아마도 당신이 잘못된 방향에서 문제를 접근하고 있다고 생각합니다. 당신이하려고하는 것은 매우 특별한 워크 플로우입니다. * .clj 파일을 스크립트로 생각하지 마십시오. Java의 패키지와 더 비슷합니다. 일반적으로 다른 네임 스페이스에 대한 require 문을 사용하여 core.clj라는 초기 네임 스페이스를 얻은 다음 기본 cli 파일에서 직접 네임 스페이스를 호출하고로드하는 대신 core.clj에서 다른 네임 스페이스의 함수를 호출합니다. –

+0

나는 이것이 이상한 일임을 알고 있지만, 내가 이것을하고 싶은 이유가있다 - 나는 몇 가지 추가 기능으로 REPL을 확장하려고 노력 중이다. 예를 들어, REPL에서 네임 스페이스 전환을 계측/포장하고 싶습니다 (일부 기능을 현재 네임 스페이스 등으로 가져 오기를 원합니다). 반드시 좋은 생각은 아니지만, 이제는 무엇을 할 수 있는지에 대한 실험과 같습니다. REPL로 처리하십시오. –

답변

1

복제 기능을 확장하려는 목표에 따라 선취 전용 플러그인을 만드는 것이 좋습니다. 그런 다음 코드를 수정하지 않고도이 플러그인을 사용할 수 있으며 필요한 경우에만 프로파일을 설치할 수 있습니다.

많은 기존의 lein 플러그인을보고 좋은 아이디어/포인터를 얻을 수 있습니다. 특히 ansi 색상을 추가하여 repl을 확장하는 'ultra'라는 플러그인에 대해 이야기하는 행성 clojure에 대한 흥미로운 블로그 게시물, 향상된 테스트 출력 형식, 향상된 스택 추적 디스플레이 및 몇 가지 다른 repl tweaks가있었습니다. 프로젝트는 기생충에서 찾을 수 있습니다 https://www.github.com/venantius/ultra

+0

사실 지금 나는 단지 lein을 떠날 생각을하고 clojure.main/repl을 사용하고있다. 그건 그렇고, 나는 울트라를 알고 있고 지금 당장하고있는 것과 호환되지 않습니다. (나는 이상하게 생각해야합니다. defn을 재정의하는 것처럼 ...) :) 고마워요. –

관련 문제