저는 Clojure에서 새로 왔고 leib 명령 줄 args에 문제가 있습니다. 내 응용 프로그램은 매우 간단합니다 :Leiningen 명령 args 구문 분석
(defn -main
[& args]
(println (apply hash-map args))
(let [{:keys [f w h]} (apply hash-map args)]
(println f w h)
; (init-frame w h)
; (draw-values f w h)
))
터미널 출력 : 나는 REPL에서 - 주요 실행하면 잘 작동
lein run :f bit-xor :w 200 :h 200
{:w 200, :h 200, :f bit-xor}
nil nil nil
. core.clj 내부에 hashmap을 정의하면 잘 작동합니다.
(def my-args (hasmap :f "bit-xor" :w 200 :h 200))
내 'f', 'w'및 'h'가없는 이유는 무엇인지 알 수 없습니다. 누구든지 도와 줄 수 있습니까?
나는 테스트 용으로 특별한 작은 앱을 만들었습니다.
(ns cmdargs.core
(:gen-class))
(defn -main
[& args]
(println "args: " args)
(println "args map: " (apply hash-map args))
(println "param keys: " (keys (apply hash-map args)))
(println "param vals: " (vals (apply hash-map args)))
(let [{:keys [param1 param2]} (apply hash-map args)]
(println "param1: " param1)
(println "param2: " param2)))
REPL 출력 :
cmdargs.core> (-main :param1 200 :param2 300)
args: (:param1 200 :param2 300)
args map: {:param2 300, :param1 200}
param keys: (:param2 :param1)
param vals: (300 200)
param1: 200
param2: 300
nil
cmdargs.core>
터미널/lein 출력 :
cmdargs$ lein run :param1 200 :param2 300
Java HotSpot(TM) Client VM warning: TieredCompilation is disabled in this release.
Java HotSpot(TM) Client VM warning: TieredCompilation is disabled in this release.
args: (:param1 200 :param2 300)
args map: {:param1 200, :param2 300}
param keys: (:param1 :param2)
param vals: (200 300)
param1: nil
param2: nil
이 오타입니다''(... 내-인수를 defn이)? 대신에 'def'여야합니다 – Shlomi
Thanks @Shlomi! 나는 고쳤다. 하지만 (def my-args ...) 'let'에서 구조 조정 작업을 확인하기 위해 정의 된 것입니다. – tkircsi