2017-10-21 12 views
2

브라우저에서 Clojurescript 프로그램을 실행하고 있습니다.ClojureScript 평가. 호출 코드에 포함 된 라이브러리를 사용하는 방법

많은 라이브러리를 가져온 다음 사용자가 해당 라이브러리를 호출하는 작은 클로저 코드 "glue-code"를 입력 할 수있게하려고합니다.

네가 4 개의 인수를 가진 eval을 호출하는 것을 볼 수 있는데, 첫 번째는 원자 인 환경의 상태이다. 하지만 실제로 다른 곳에서 요구 한 모든 기능을 사용하여 현재 환경을 eval에 대한 적절한 인수로 바꿀 수 있습니까?

업데이트 : NS 세 번째의 opts -지도, 인수의 옵션을 :

나는 어쩌면 나는를 사용하여 평가에 대한 namesspace을 설정할 수 있다고 생각했다.

:ns "fig-pat.core" 

하지만 차이 : 나는 내 응용 프로그램의 네임 스페이스로 설정합니다. 콘솔에서 찾고

, 그것은 확실히는 평가를 수행하려고하는 경우, 그러나 평가 에드 코드에서 참조 이름이 인식되지 않는 불평 : 예를 들어

WARNING: Use of undeclared Var /square 

. (평방 내가 필요 해요 함수는 응용 프로그램 자체, 즉 무화과 pat.core 네임 스페이스에 볼 수 있습니다..)

는 그때 얻을 : 나는이 실패를 믿고있어

SyntaxError: expected expression, got '.'[Learn More] 

전체적으로 평가 된 표현.

업데이트 2 : 단지 전무를 인쇄 How can I get the Clojurescript namespace I am in from within a clojurescript program?

(println *ns*) 

: 나는이 문제를 추측하고있어

실제로 관련이있을 수 있습니다. Clojurescript는 자체 네임 스페이스를 볼 수 없습니다.

그러면 : ns in eval이 작동하지 않습니까?

답변

2

클로저 스크립트 프로그램 내에서 eval을 호출하는 것은 "자체 호스팅 클로저 스크립트"의 일부입니다. 자체 호스팅 표식에서 해결 정책을 구현하지 않으면 네임 스페이스를 사용할 수 없습니다. 브라우저가 네임 스페이스를 해결하는 방법을 알려야 함을 의미합니다. cdn에서 cljs 파일을로드합니다.

올바르게 이름 공간을 구현하는 것은 그리 간단하지 않습니다. 이것은 load-fn의 문서화 문자열에있는 암호문으로 cljs.js namespace에서 설명합니다. 브라우저에서 실행 자체 호스트 cljs에서 해결

여러 가지 도구 지원 네임 스페이스는 Klipsecrepl

을 예 :