Clojure(Rubyから)を使い始めたばかりですが、コマンドラインインターフェースで小さなアプリを作成したいと考えています。 CLへの入出力をどのように処理しますか?
Clojure.contrib.command-lineがあることに気づきましたが、ドキュメントはスリムです。
with-command-line
マクロの使用例を次に示します。次のコードは、コマンドライン引数の値を出力するだけのmainメソッドを備えた自明なクラスを指定しています。
(ns cmd-line-demo
(:gen-class)
(:use clojure.contrib.command-line))
(defn -main [& args]
(with-command-line args
"Command line demo"
[[foo "This is the description for foo" 1]
[bar "This is the description for bar" 2]
[boolean? b? "This is a boolean flag."]
remaining]
(println "foo: " foo)
(println "bar: " bar)
(println "boolean?: " boolean?)
(println "remaining: " remaining)))
REPLでクラスをコンパイルします。
user> (compile 'cmd-line-demo)
cmd-line-demo
1)コマンドライン引数なしで実行すると、ヘルプ情報が表示されます。ヘルプ情報は、--help
または-h
フラグを使用して表示することもできます。ヘルプ情報は、cmdspecから自動的に生成されることに注意してください。
$ Java -classpath . cmd_line_demo
Command line demo
Options
--foo <arg> This is the description for foo [default 1]
--bar <arg> This is the description for bar [default 2]
--boolean, -b This is a boolean flag.
2)未指定の引数は、cmdspecバインディングで指定されたデフォルト値を受け取ります。たとえば、bar
のデフォルト値は2
です。
$ Java -classpath . cmd_line_demo --foo "changed value"
foo: changed value
bar: 2
boolean?: nil
remaining: []
3)ブールフラグは接尾辞「?」で示されます。 cmdspec内。フラグ自体はnotに「?」を含めていることに注意してください。その名前の一部として。
$ Java -classpath . cmd_line_demo -boolean
foo: 1
bar: 2
boolean?: true
remaining: []
4)また、cmdspecで複数のシンボルを指定することにより、フラグエイリアスを指定できることに注意してください。 boolean?
フラグとb?
フラグを使用してこれを行いました。
5)最後に、remaining
に関連するフラグなしで残りのすべての引数をキャプチャするように指定しました。
$ Java -classpath . cmd_line_demo -foo test file1 file2 file3
foo: test
bar: 2
boolean?: nil
remaining: [file1 file2 file3]
古いclojure.contrib.command-lineはtools.cliに置き換えられました。
https://github.com/clojure/tools.cli
tools.cliは、以前はclargonと呼ばれていました。以下は、tools.cliの使用例を示す2つのブログ投稿です(clargonへの参照を単純にtools.cliに置き換えます。投稿は古くなっています)。
あなたができることを追加したいと思います
(apply -main *command-line-args*)
インタープリットモードで機能させるには、(defn -main ...)
の下にあります。
質問が提起されてからしばらくして、CLIインターフェイスの構築に関してはdocopt
ライブラリを使用することをお勧めします。あり Clojure用の1つ-docopt.clj
docoptは、ヘルプメッセージやプログラムインターフェイスの説明のマニュアルページで何十年も使用されている規則に基づいています。 docoptのインターフェイスの説明はそのようなヘルプメッセージですが、形式化されています
したがって、インターフェースを宣言し、同時にドキュメント化することができます。これは驚くべきことであり、簡単に実行できます。
詳細については、チェックすることをお勧めします http://docopt.org/
また、あなたのインターフェースをチェックするためのオンラインアプリもあります http://try.docopt.org/
そして最後に これが私の例です Clojure libの使用方法。
多分ジャークを試してみてください。 Jarkは、永続的なJVMでclojureプログラムを実行するためのツールです。いくつかの便利なコマンドラインユーティリティがあります。
jark ns load file.clj
jark <namespace>.<function> <args>
jark if cli-json <namespace><function> args