Στο άρθρο που αναλύει τα χαρακτηριστικά του OptionParser συζητήσαμε μερικούς από τους λόγους που κάνουν χρησιμοποιώντας το OptionParser Ρουμπίνι προτιμήστε να εξετάσετε χειροκίνητα το ARGV για να κάνετε ανάλυση εντολές με το χέρι. Τώρα ήρθε η ώρα να κατεβείτε στην εκμάθηση πώς να χρησιμοποιήσετε το OptionParser και τα χαρακτηριστικά του.
Ο ακόλουθος κώδικας boilerplate θα χρησιμοποιηθεί για όλα τα παραδείγματα αυτού του σεμιναρίου. Για να δοκιμάσετε κάποιο από τα παραδείγματα, απλώς βάλτε τα παραδείγματα opts.on μπλοκ δίπλα στο σχόλιο TODO. Η εκτέλεση του προγράμματος θα εκτυπώσει την κατάσταση των επιλογών και του ARGV, επιτρέποντάς σας να εξετάσετε τα αποτελέσματα των διακοπτών σας.
#! / usr / bin / env ruby
απαιτούν 'optparse'
απαιτούν 'pp'
# Αυτό το hash θα κρατήσει όλες τις επιλογές
# αναλύθηκε από τη γραμμή εντολών από
# OptionParser.
επιλογές = {}
optparse = OptionParser.new κάνουμε | opts |
# TODO: Βάλτε τις επιλογές γραμμής εντολών εδώ
# Εμφανίζεται η οθόνη βοήθειας, όλα τα προγράμματα είναι
# υποτίθεται ότι έχει αυτή την επιλογή.
opts.on ('-h', '--help', 'Εμφάνιση αυτής της οθόνης')
βάζει επιλογές
έξοδος
τέλος
τέλος
# Ανίχνευση της γραμμής εντολών. Θυμηθείτε ότι υπάρχουν δύο μορφές
# της μεθόδου ανάλυσης. Η μέθοδος "parse" απλά αναλύει
# ARGV, ενώ το 'parse!' η μέθοδος αναλύει το ARGV και καταργεί
# οποιεσδήποτε επιλογές βρίσκονται εκεί, καθώς και οποιεσδήποτε παράμετροι για
# τις επιλογές. Αυτό που έχει απομείνει είναι η λίστα αρχείων για αλλαγή μεγέθους.
optparse.parse!
pp "Επιλογές:", επιλογές
pp "ARGV:", ARGV
Απλός διακόπτης
Ένας απλός διακόπτης είναι ένα επιχείρημα χωρίς προαιρετικές μορφές ή χωρίς παραμέτρους. Η επίδραση θα είναι απλά να ορίσετε μια σημαία στις επιλογές χασίσι. Δεν θα μεταβιβαστούν άλλες παράμετροι στο επί μέθοδος.
επιλογές [: απλό] = ψευδές
opts.on ('-s', '- απλή', 'Απλό όρισμα')
επιλογές [: απλή] = αληθής
τέλος
Αλλαγή με υποχρεωτική παράμετρο
Οι διακόπτες που λαμβάνουν μια παράμετρο πρέπει να δηλώνουν το όνομα της παραμέτρου στη μακρά μορφή του διακόπτη. Για παράδειγμα, "-f", "- αρχείο ΑΡΧΕΙΟ" σημαίνει ότι ο διακόπτης -f ή ο φάκελος παίρνει μια μόνο παράμετρο που ονομάζεται ΑΡΧΕΙΟ και αυτή η παράμετρος είναι υποχρεωτική. Δεν μπορείτε να χρησιμοποιήσετε το αρχείο -f ή -file χωρίς να περάσετε παράμετρο.
επιλογές [: mand] = ""
opts.on ('-m', '- υποψήφιο ΑΡΧΕΙΟ', 'Υποχρεωτικό επιχείρημα')
επιλογές [: mand] = f
τέλος
Διακόπτης με προαιρετική παράμετρο
Οι παράμετροι διακοπής δεν είναι υποχρεωτικές, μπορεί να είναι προαιρετικές. Για να δηλώσετε μια παράμετρο διακόπτη προαιρετική, τοποθετήστε το όνομά της σε παρενθέσεις στην περιγραφή του διακόπτη. Για παράδειγμα, "--logfile [FILE]" σημαίνει ότι η παράμετρος FILE είναι προαιρετική. Εάν δεν παρέχεται, το πρόγραμμα θα υποθέσει μια κανονική προεπιλογή, όπως ένα αρχείο που ονομάζεται log.txt.
Στο παράδειγμα, το ιδίωμα a = b || ντο χρησιμοποιείται. Αυτό είναι απλά συντομογραφία για "a = b, αλλά αν b είναι ψευδής ή μηδέν, a = c".
επιλογές [: opt] = false
opts.on ('-o', '-επιλεκτικό [OPT]', 'Προαιρετικό όρισμα') do | f |
επιλογές [: opt] = f || "τίποτα"
τέλος
Αυτόματη μετατροπή σε Float
Το OptionParser μπορεί να μετατρέψει αυτόματα το όρισμα σε ορισμένους τύπους. Ένας από αυτούς τους τύπους είναι ο Float. Για να μετατρέψετε αυτόματα τα επιχειρήματά σας σε μια μεταγωγή στο Float, περάστε το Float στο επί μετά τις συμβολοσειρές περιγραφής των διακοπτών σας.
Οι αυτόματες μετατροπές είναι χρήσιμες. Όχι μόνο σας εξοικονομούν το βήμα της μετατροπής της συμβολοσειράς στον επιθυμητό τύπο, αλλά και να ελέγξετε τη μορφή για εσάς και θα ρίξετε μια εξαίρεση εάν είναι μορφοποιημένη λανθασμένα.
επιλογές [: float] = 0.0
opts.on ('-f', '- float NUM', Float, 'Μετατροπή σε πλωτήρα') do | f |
επιλογές [: float] = f
τέλος
Κάποιοι άλλοι τύποι που μπορεί να μετατρέψει το OptionParser να συμπεριλαμβάνουν αυτόματα Time and Integer.
Λίστες των επιχειρημάτων
Τα επιχειρήματα μπορούν να ερμηνευτούν ως λίστες. Αυτό μπορεί να θεωρηθεί ως μετατροπή σε έναν πίνακα, όπως μετατράπηκε σε Float. Ενώ η συμβολοσειρά επιλογής σας μπορεί να ορίσει την παράμετρο που καλείται "a, b, c", το OptionParser θα επιτρέψει τυφλά οποιοδήποτε αριθμό στοιχείων στη λίστα. Έτσι, εάν χρειάζεστε έναν συγκεκριμένο αριθμό στοιχείων, φροντίστε να ελέγξετε μόνοι σας το μήκος του πίνακα.
επιλογές [: λίστα] = []
opts.on ('-l', '- λίστα a, b, c', Array, 'Λίστα παραμέτρων') do | l |
επιλογές [: λίστα] = l
τέλος
Σύνολο επιχειρημάτων
Μερικές φορές έχει νόημα να περιορίζετε τα επιχειρήματα σε μια αλλαγή σε μερικές επιλογές. Για παράδειγμα, ο ακόλουθος διακόπτης θα λάβει μόνο μία υποχρεωτική παράμετρο και η παράμετρος πρέπει να είναι μία από Ναί, όχι ή μπορεί. Εάν η παράμετρος είναι οτιδήποτε άλλο, θα ριχτεί μια εξαίρεση.
Για να το κάνετε αυτό, περάστε μια λίστα αποδεκτών παραμέτρων ως σύμβολα μετά τις συμβολοσειρές περιγραφής διακόπτη.
επιλογές [: set] =: ναι
opts.on ('-s', '--set OPT', [: ναι,: όχι,: ίσως], "Παράμετροι από ένα σύνολο") do | s |
επιλογές [: set] = s
τέλος
Αρνητικά έντυπα
Οι διακόπτες μπορούν να έχουν αρνητική μορφή. Ο διακόπτης - μη συγγενή μπορεί να έχει ένα που κάνει το αντίθετο αποτέλεσμα, που ονομάζεται - δεν έχει αρνηθεί. Για να το περιγράψετε στη συμβολοσειρά περιγραφής διακόπτη, τοποθετήστε το εναλλακτικό τμήμα σε παρενθέσεις: - [όχι] αναιρείται. Εάν συναντηθεί η πρώτη φόρμα, το αληθές θα μεταβιβαστεί στο μπλοκ και το ψευδές θα αποκλειστεί εάν συναντηθεί η δεύτερη φόρμα.
επιλογές [: neg] = ψευδείς
opts.on ('-n', '- [no-] negated', "Αρνητικά έντυπα") δεν |
επιλογές [: neg] = n
τέλος