Commandoregelargumenten lezen

Ruby:
Commandoregelargumenten lezen

Hoe te:

Om command-line argumenten te bemachtigen, biedt Ruby een eenvoudige array: ARGV. Het bevat alle argumenten die zijn doorgegeven, in de volgorde waarin ze zijn gegeven.

# hello.rb
naam = ARGV[0] || "Wereld"
puts "Hallo, #{naam}!"

# Uitvoeren met: ruby hello.rb Alice
# Uitvoer: Hallo, Alice!

Om meerdere argumenten te hanteren:

# greet.rb
naam, deel_van_de_dag = ARGV
puts "Goede #{deel_van_de_dag || 'dag'}, #{naam || 'daar'}!"

# Uitvoeren met: ruby greet.rb Bob Ochtend
# Uitvoer: Goede Ochtend, Bob!

Opties maken met een lus:

# options.rb
opties = {}
ARGV.each do |arg|
  sleutel, waarde = arg.split('=')
  opties[sleutel.to_sym] = waarde
end
p opties

# Uitvoeren met: ruby options.rb naam=Tom leeftijd=30
# Uitvoer: {:naam=>"Tom", :leeftijd=>"30"}

Diepgaand

Het lezen van command-line argumenten is een praktijk zo oud als command-line interfaces zelf. Het gaat om het benutten van gebruikersinput zonder GUI – essentieel voor automatisering of bij het uitvoeren van scripts op servers.

Ruby’s ARGV is niet uniek; veel talen hebben iets vergelijkbaars. Toch leunt Ruby’s implementatie op eenvoud en duidelijke syntax - geen gedoe, gewoon een array.

Onder de oppervlakte is ARGV gewoon een instantie van Array die vooraf is gevuld met de argumenten die na de scriptnaam in de commando-aanroep verschijnen. Ruby zet het op voordat je code zelfs maar wordt uitgevoerd, waardoor het direct klaar is voor gebruik.

Alternatieven? Zeker. Voor complexe behoeften, zoals het parseren van vlaggen (bv. --verbose of -v), heeft Ruby de klasse OptionParser in de standaardbibliotheek. Dit kan meer aan dan ARGV, zoals standaardwaarden, automatische typeconversie en het genereren van helpberichten.

Soms wil je gewoon weten of een argument al dan niet is opgegeven, zonder rekening te houden met de waarde. Daarvoor doet ARGV.include? de truc.

Zie Ook