Verwenden Sie OptionParser, um Befehle in Ruby zu analysieren

In dem Artikel über die Funktionen von OptionParser Wir haben einige der Gründe besprochen, die die Verwendung von OptionParser in ermöglichen Rubin Es ist vorzuziehen, ARGV manuell zu durchsuchen, um es zu analysieren Befehle von Hand. Jetzt ist es an der Zeit, sich mit der Verwendung von OptionParser und seinen Funktionen vertraut zu machen.

Der folgende Boilerplate-Code wird für alle Beispiele in diesem Lernprogramm verwendet. Um eines der Beispiele auszuprobieren, geben Sie einfach die Beispiele ein opts.on Block neben dem TODO-Kommentar. Wenn Sie das Programm ausführen, wird der Status der Optionen und ARGV gedruckt, sodass Sie die Auswirkungen Ihrer Schalter untersuchen können.

#! / usr / bin / env ruby
erfordern 'optparse'
erfordern 'pp'
# Dieser Hash enthält alle Optionen
# von der Kommandozeile aus analysiert
# OptionParser.
options = {}
optparse = OptionParser.new do | opts |
# TODO: Fügen Sie hier Befehlszeilenoptionen ein
# Dies zeigt den Hilfebildschirm an, alle Programme sind
# hat diese Option angenommen.
instagram viewer

opts.on ('-h', '--help', 'Diesen Bildschirm anzeigen') tun
setzt opts
Ausfahrt
Ende
Ende
# Analysieren Sie die Befehlszeile. Denken Sie daran, dass es zwei Formen gibt
# der Analysemethode. Die 'parse'-Methode analysiert einfach
# ARGV, während die 'Analyse!' Methode analysiert ARGV und entfernt
# alle dort gefundenen Optionen sowie alle Parameter für
# die Optionen. Was bleibt, ist die Liste der Dateien, deren Größe geändert werden soll.
optparse.parse!
pp "Optionen:", Optionen
pp "ARGV:", ARGV

Einfacher Schalter

Ein einfacher Schalter ist ein Argument ohne optionale Formulare oder ohne Parameter. Der Effekt besteht darin, einfach ein Flag in den Optionen zu setzen Hash. Es werden keine weiteren Parameter an die übergeben auf Methode.

options [: simple] = false
opts.on ('-s', '--simple', "Einfaches Argument") tun
options [: simple] = true
Ende

Mit obligatorischem Parameter wechseln

Schalter, die einen Parameter annehmen, müssen nur den Parameternamen in der Langform des Schalters angeben. Beispielsweise, "-f", "--file FILE" bedeutet, dass der Schalter -f oder --file einen einzelnen Parameter namens FILE verwendet, und dieser Parameter ist obligatorisch. Sie können weder -f noch --file verwenden, ohne auch einen Parameter zu übergeben.

options [: mand] = ""
opts.on ('-m', '--mandatory FILE', "Obligatorisches Argument") do | f |
Optionen [: mand] = f
Ende

Mit optionalem Parameter wechseln

Schalterparameter müssen nicht obligatorisch sein, sie können optional sein. Um einen Schalterparameter als optional zu deklarieren, setzen Sie seinen Namen in der Schalterbeschreibung in Klammern. Beispielsweise, "--logfile [FILE]" bedeutet, dass der Parameter FILE optional ist. Wenn nicht angegeben, nimmt das Programm einen vernünftigen Standard an, z. B. eine Datei mit dem Namen log.txt.

Im Beispiel die Redewendung a = b || c wird genutzt. Dies ist nur eine Abkürzung für "a = b, aber wenn b falsch oder null ist, ist a = c".

options [: opt] = false
opts.on ('-o', '--optional [OPT]', "Optionales Argument") do | f |
Optionen [: opt] = f || "nichts"
Ende

Automatisch in Float konvertieren

OptionParser kann Argumente automatisch in einige Typen konvertieren. Einer dieser Typen ist Float. Um Ihre Argumente automatisch in einen Schalter in Float umzuwandeln, übergeben Sie Float an auf Methode nach Ihren Schalterbeschreibungszeichenfolgen.

Automatische Konvertierungen sind praktisch. Sie ersparen Ihnen nicht nur den Schritt des Konvertierens der Zeichenfolge in den gewünschten Typ, sondern überprüfen auch das Format für Sie und lösen eine Ausnahme aus, wenn sie falsch formatiert ist.

Optionen [: float] = 0.0
opts.on ('-f', '--float NUM', Float, "In float konvertieren") do | f |
Optionen [: float] = f
Ende

Einige andere Typen, die OptionParser automatisch konvertieren kann, umfassen Time und Integer.

Argumentlisten

Argumente können als Listen interpretiert werden. Dies kann als Konvertierung in ein Array angesehen werden, während Sie in Float konvertieren. Während Ihre Optionszeichenfolge den Parameter definieren kann, der als "a, b, c" bezeichnet werden soll, lässt OptionParser eine beliebige Anzahl von Elementen in der Liste blind zu. Wenn Sie also eine bestimmte Anzahl von Elementen benötigen, überprüfen Sie die Array-Länge unbedingt selbst.

Optionen [: Liste] = []
opts.on ('-l', '--list a, b, c', Array, "Liste der Parameter") do | l |
Optionen [: Liste] = l
Ende

Reihe von Argumenten

Manchmal ist es sinnvoll, Argumente auf einen Wechsel auf wenige Auswahlmöglichkeiten zu beschränken. Der folgende Schalter akzeptiert beispielsweise nur einen einzigen obligatorischen Parameter, und der Parameter muss einer von sein Ja, Nein oder könnte sein. Wenn der Parameter überhaupt etwas anderes ist, wird eine Ausnahme ausgelöst.

Übergeben Sie dazu eine Liste akzeptabler Parameter als Symbole nach den Schalterbeschreibungszeichenfolgen.

options [: set] =: yes
opts.on ('-s', '--set OPT', [: yes,: no,: vielleicht], "Parameter aus einer Menge") do | s |
options [: set] = s
Ende

Negierte Formen

Schalter können eine negierte Form haben. Der Schalter --negiert kann eine haben, die den gegenteiligen Effekt bewirkt, genannt - nicht negiert. Um dies in der Schalterbeschreibungszeichenfolge zu beschreiben, setzen Sie den alternativen Teil in Klammern: - [nein-] negiert. Wenn das erste Formular angetroffen wird, wird true an den Block übergeben, und false wird blockiert, wenn das zweite Formular angetroffen wird.

options [: neg] = false
opts.on ('-n', '- [no-] negiert', "Negierte Formen") do | n |
Optionen [: neg] = n
Ende
instagram story viewer