[解決済み] コマンドラインインターフェースでClojureアプリを作る?
2023-07-08 08:59:14
質問
私は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の中で接尾辞"?"で表わされます。 フラグそのものは ではない はその名前の一部として "?" を含んでいることに注意してください。
$ 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でWebアプリケーションを作るには?[クローズド]
-
[解決済み] ClojureでStringを数値に変換するにはどうしたらいいですか?
-
[解決済み] Clojure CoreやContribでZip関数に相当するものはありますか?
-
[解決済み] Clojure、Scheme/Racket、Common Lispの違いは何ですか?
-
[解決済み] clojureで指数を計算するには?
-
[解決済み] Clojureのブロックコメント
-
[解決済み] コンポジュール・ルートの "ビッグ・アイデア "とは?
-
[解決済み] ClojureのTransducersを簡単に説明できる人はいますか?
-
[解決済み] Clojureで遅延シーケンスを非遅延シーケンスに変換する方法
-
[解決済み] なぜClojureではクラスを定義する方法が1つではなく、5つあるのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ClojureでWebアプリケーションを作るには?[クローズド]
-
[解決済み] useとrequireの違い
-
[解決済み] 実社会で活躍するLisp【クローズド
-
[解決済み] Clojure CoreやContribでZip関数に相当するものはありますか?
-
[解決済み] Clojure、Scheme/Racket、Common Lispの違いは何ですか?
-
[解決済み] clojureで指数を計算するには?
-
[解決済み] Clojureのdoseqとforの違いについて
-
[解決済み] ClojureのTransducersを簡単に説明できる人はいますか?
-
[解決済み] Clojureでは、リストタイプを変換する簡単な方法はありますか?
-
[解決済み] clojureの::は何に使われるのですか?