मैंने अभी w / Clojure (रूबी से आना) शुरू किया था और मैं कमांड-लाइन इंटरफ़ेस के साथ एक छोटा ऐप बनाना चाहूंगा। मैं एक सीएल को इनपुट / आउटपुट कैसे संभाल सकता हूं?
मैंने देखा कि एक clojure.contrib.command- लाइन है, लेकिन प्रलेखन पतला है।
मैंने अभी w / Clojure (रूबी से आना) शुरू किया था और मैं कमांड-लाइन इंटरफ़ेस के साथ एक छोटा ऐप बनाना चाहूंगा। मैं एक सीएल को इनपुट / आउटपुट कैसे संभाल सकता हूं?
मैंने देखा कि एक clojure.contrib.command- लाइन है, लेकिन प्रलेखन पतला है।
जवाबों:
यहाँ इसके with-command-line
मैक्रो का उपयोग करने का एक उदाहरण है । निम्न कोड एक मुख्य विधि के साथ एक तुच्छ वर्ग को निर्दिष्ट करता है जो कुछ भी नहीं करता है लेकिन इसके कमांड लाइन तर्कों के मूल्यों को प्रिंट करता है।
(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.contrib.command- लाइन को tools.cli से बदल दिया गया है।
https://github.com/clojure/tools.cli
tools.cli को क्लियरगन कहा जाता था। नीचे दो ब्लॉग पोस्ट दिए गए हैं, जो टूल.ली का उपयोग करने का उदाहरण देते हैं (सरल किसी भी संदर्भ को टूलगन के साथ हटा दें। पोस्ट आउट ऑफ डेट हैं)।
यह पुराने clojure.contrib.command- लाइन सहित कुछ तरीकों के तरीकों को दिखाता है
सवाल उठाए जाने के लंबे समय बाद मैं docopt
पुस्तकालयों का उपयोग करने का सुझाव दे सकता हूं जब यह सीएलआई इंटरफ़ेस का निर्माण करने की बात आती है। वहाँ Clojure के लिए एक है -docopt.clj
docopt सम्मेलनों पर आधारित है जो दशकों से मदद संदेशों और प्रोग्राम इंटरफ़ेस विवरण के लिए मैन पेज में उपयोग किए जाते हैं। Docopt में इंटरफ़ेस विवरण एक ऐसा मदद संदेश है, लेकिन औपचारिक रूप से
तो आप घोषणा कर सकते हैं अपने इंटरफ़ेस और इसे उसी समय में प्रलेखित कर सकते हैं - जो अद्भुत और करने में आसान है।
अधिक जानकारी के लिए मैं http://docopt.org/ की जांच करने की सलाह देता हूं
इसके अलावा अपने इंटरफ़ेस की जाँच करने के लिए एक ऑनलाइन ऐप है http://try.docopt.org/
और अंत में यहाँ मेरा उदाहरण है कि क्लोजर लिब का उपयोग कैसे किया जा सकता है।
शायद जार की कोशिश करो। Jark लगातार JVM पर क्लोजर प्रोग्राम चलाने का एक उपकरण है। इसकी कुछ उपयोगी कमांड-लाइन उपयोगिताओं हैं।
jark ns load file.clj
jark <namespace>.<function> <args>
jark if cli-json <namespace><function> args