Recherche…


Introduction

OptionParser peut être utilisé pour analyser les options de ligne de commande à partir d' ARGV .

Options de ligne de commande obligatoires et facultatives

Il est relativement facile d'analyser la ligne de commande à la main si vous ne recherchez rien de trop complexe:

# Naive error checking
abort('Usage: ' + $0 + ' site id ...') unless ARGV.length >= 2

# First item (site) is mandatory
site = ARGV.shift

ARGV.each do | id |
  # Do something interesting with each of the ids
end

Mais lorsque vos options commenceront à se compliquer, vous devrez probablement utiliser un analyseur d'options tel que OptionParser :

require 'optparse'

# The actual options will be stored in this hash
options = {}

# Set up the options you are looking for
optparse = OptionParser.new do |opts|
  opts.banner = "Usage: #{$0} -s NAME id ..."

  opts.on("-s", "--site NAME", "Site name") do |s|
    options[:site] = s
  end

  opts.on( '-h', '--help', 'Display this screen' ) do
    puts opts
    exit
  end
end

# The parse! method also removes any options it finds from ARGV.
optparse.parse!

Il y a aussi une parse non destructive, mais c'est beaucoup moins utile si vous prévoyez d'utiliser le reste de ce que ARGV .

La classe OptionParser ne dispose d'aucun moyen pour appliquer des arguments obligatoires (tels que --site dans ce cas). Cependant, vous pouvez faire votre propre vérification après avoir exécuté l' parse! :

# Slightly more sophisticated error checking
if options[:site].nil? or ARGV.length == 0
  abort(optparse.help)
end

Pour un gestionnaire d'options obligatoire plus générique, consultez cette réponse . Au cas où ce ne serait pas clair, toutes les options sont facultatives, à moins que vous ne fassiez le maximum pour les rendre obligatoires.

Les valeurs par défaut

Avec OptionsParser , il est très facile de définir des valeurs par défaut. Il suffit de pré-remplir le hachage pour stocker les options dans:

options = {
  :directory => ENV['HOME']
}

Lorsque vous définissez l'analyseur, il remplace le paramètre par défaut si un utilisateur fournit une valeur:

OptionParser.new do |opts|
  opts.on("-d", "--directory HOME", "Directory to use") do |d|
    options[:directory] = d
  end
end

Longues descriptions

Parfois, votre description peut être assez longue. Par exemple irb -h répertorie l'argument qui se lit comme suit:

  --context-mode n  Set n[0-3] to method to create Binding Object,
                    when new workspace was created

Ce n'est pas immédiatement clair comment soutenir cela. La plupart des solutions nécessitent un ajustement pour que l'indentation des deuxièmes lignes et des lignes suivantes s'aligne sur la première. Heureusement, la on méthode prend en charge de multiples lignes de description en les ajoutant comme arguments séparés:

  opts.on("--context-mode n",
          "Set n[0-3] to method to create Binding Object,",
          "when new workspace was created") do |n|
    optons[:context_mode] = n
  end

Vous pouvez ajouter autant de lignes de description que vous le souhaitez pour expliquer pleinement l’option.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow