REPL과 main
REPL과 main (The REPL and main entry points)
clojure.main 네임스페이스
clojure.main 네임스페이스는 Clojure 프로그램과 인터랙티브 세션을 Java의 애플리케이션 런처 도구 java를 통해 시작할 수 있게 해 주는 함수들을 제공해요.
본문
clojure.main --help
clojure.main/main 진입점은 다양한 인자와 플래그를 받아요.
- 옵션도 인자도 없으면, 인터랙티브 Read-Eval-Print Loop를 실행해요
- init 옵션: ** -i, --init path 파일이나 리소스 로드 ** -e, --eval string 문자열의 표현식 평가; non-nil 값 출력 ** --report target 잡히지 않은 예외를 "file"(기본), "stderr", 또는 "none"으로 보고, System 속성 clojure.main.report를 덮어씀 (1.10.1에서 추가됨)
- main 옵션: ** -r, --repl repl 실행 ** path 파일이나 리소스에서 스크립트 실행 ** - 표준 입력에서 스크립트 실행 ** -m, --main 실행할 -main 함수를 찾을 네임스페이스 ** -h, -?, --help 이 도움말 메시지 출력 후 종료
- 연산(operation):
** 흔히 set!-가능한 var들을 위한 스레드-지역 바인딩 확립
** user 네임스페이스 진입
**
pass:[*command-line-args*]를, 어떤 main 옵션 뒤에 나타나는 명령줄 인자를 포함하는 문자열 seq로 바인딩 ** 모든 init 옵션을 순서대로 실행 ** 요청되었다면 repl 또는 스크립트 실행
init 옵션은 반복되고 자유롭게 혼합될 수 있지만, 어떤 main 옵션보다 앞에 나타나야 해요. repl을 실행하기 전에 어떤 eval 옵션이 나타나면 보통의 repl 인사말 메시지 "Clojure ~(clojure-version)"를 억제해요.
경로는 파일시스템에서 절대 또는 상대일 수 있거나, 클래스패스에 상대적일 수 있어요. 클래스패스-상대 경로는 @ 또는 @/ 접두사를 가져요.
REPL 시작하기 (Launching a REPL)
Clojure _repl_을 시작하는 가장 간단한 방법은 clojure.main을 호출하는 <<xref/../../guides/getting_started#,clj>> 명령 도구를 사용하는 거예요:
$ clj
Clojure 1.12.0
user=>
REPL 프롬프트는 현재 네임스페이스(pass:[ns])의 이름을 보여주며, 기본은 _user_예요.
REPL을 사용할 때 몇 가지 특수 var를 사용할 수 있어요:
- *1, *2, *3 - 마지막 세 개의 평가된 표현식 결과를 보유
- *e - 마지막 예외의 결과를 보유
clojure.repl 네임스페이스는 사용 가능한 함수의 소스와 문서를 조사하는 유용한 함수들을 여러 개 가져요:
- doc - 이름이 주어지면 var에 대한 docstring을 출력
- find-doc - doc이나 이름이 패턴과 일치하는 어떤 var에 대한 docstring을 출력
- apropos - 정규식과 일치하는 정의들의 seq를 반환
- source - 심볼의 소스를 출력
- pst - 주어진 예외 또는 기본으로 *e에 대한 print stack trace
스크립트 시작하기 (Launching a Script)
Clojure 코드로 가득 찬 파일을 스크립트로 실행하려면, 스크립트 경로를 clojure.main에 인자로 전달해요:
clj -M /path/to/myscript.clj
스크립트에 인자 전달하기 (Passing arguments to a Script)
스크립트에 인자를 전달하려면, clojure.main을 시작할 때 추가 인자로 전달해요:
clj -M /path/to/myscript.clj arg1 arg2 arg3
인자들은 pass:[*command-line-args*] var에 바인딩된 문자열 seq로 프로그램에 제공돼요:
*command-line-args* => ("arg1" "arg2" "arg3")