>

저는 첫 Clojure 프로그램 중 하나를 통해 노력하고 있습니다. 내가 남은 것은 프로그램이 명령 행 인수를 받도록하는 것입니다. arg의 수는 다양 할 수 있지만 (적어도 하나 이상이어야 함) 각 명령 줄 arg는 내 main 의 함수에 대한 인수로 제공되어야합니다. , 한번에 한. 온라인에서 읽었으며 clojure/tools.cli 인 것 같습니다.  그것을하는 방법입니다 ( parse-opts 사용)  아마도?). 그러나 나는 내 삶에 대해 알아낼 수 없습니다. 실제로 발생해야하는 유효성 검사는 없습니다. 사용자가 제공하는 모든 것이 유효합니다. (확인해야 할 유일한 것은 하나 이상의 인수가 제공된다는 것입니다). 이 문제를 해결하는 방법에 대한 제안이 있으십니까?

내가 겪은 모든 예는 매우 복잡해 보이고 머리를 아주 쉽게 넘어 간다.

내가하려고하는 쉬운 예는 사용자가 많은 수의 명령 줄 인수를 제공 한 다음 각 줄을 터미널의 새 줄에 인쇄하는 clojure입니다.

leiningen을 사용하여 프로그램을 실행합니다.


  • 답변 # 1

    질문 전체가 다음과 같이 요약 된 것 같습니다 :

    와이즈 비즈

    대답하겠습니다. 상당히 간결하게 할 수 있습니다 :

    An easy example of what I'm trying to do is after a user provides any number of command line arguments, then have clojure print each string in a new line of the terminal.

    참고로, 0 개의 인수가 전달 될 때절대적으로실패하지 않으면 (defn -main [& args] ; & creates a list of var-args (if-not (empty? args) ; Foreach arg, print the arg... (doseq [arg args] (println arg)) ; Handle failure however here (throw (Exception. "Must have at least one argument!")))) 를 건너 뛸 수 있습니다.  검사. 와이즈 비즈   empty? 경우 실행되지 않습니다  반복 할 항목이 없으므로 비어 있습니다.

    doseq 전체를 교체 할 수도 있습니다  포함 :

    args
    
    
    그러나 그것은 doseq 의 남용 일 것입니다 .

  • 답변 # 2

    쉬운 방법은 (mapv println args) 를 사용하는 것입니다 :

    mapv
    
    

  • 답변 # 3

    Clojure Spec은 많은 작업을 수행 할 수 있으며 명령 줄 인수를 구문 분석하고 유효성 검사하는 것이 그 중 하나입니다. 예를 들면 다음과 같습니다.

    clojure.core/*command-line-args*
    
    

    Clojure Spec은 Clojure 1.9 버전에서 제공됩니다.

    (doseq [arg *command-line-args*] (println (str "Read an argument: " arg)))

관련 자료

  • 이전 kafka s3 sink connect를 사용할 때 스키마 레지스트리를 사용하여 스키마를 얻을 수 있습니까?
  • 다음 c# - REST API URI 오류