Wie zu verwenden getoptlong Klasse in ruby?
Ich brauche Hilfe mit getoptlong Klasse in Ruby. Ich muss der Befehl "ausführen" prog_name.ruby -u -i-s filename. Bisher kann ich nur ausführen es mit prog_name.ruby -u filename-i Dateiname -s Dateiname.
Dies ist mein getoptlong code:
require 'getoptlong'
class CommonLog
parser = GetoptLong.new
parser.set_options(["-h", "--help", GetoptLong::NO_ARGUMENT],
["-u", "--url", GetoptLong::NO_ARGUMENT],
["-i", "--ip", GetoptLong::NO_ARGUMENT],
["-s", "--stat", GetoptLong::NO_ARGUMENT])
begin
begin
opt,arg = parser.get_option
break if not opt
case opt
when "-h" || "--help"
puts "Usage: -u filename"
puts "Usage: -i filename"
puts "Usage: -s filename"
exit
when "-u" || "--url"
log = CommonLog.new(ARGV[0])
log.urlReport
when "-i" || "--ip"
log = CommonLog.new(ARGV[0])
log.ipReport
when "-s" || "--stat"
log = CommonLog.new(ARGV[0])
log.statReport
end
rescue => err
puts "#{err.class()}: #{err.message}"
puts "Usage: -h -u -i -s filename"
exit
end
end while 1
if ARGV[0] == nil || ARGV.size != 1
puts "invalid! option and filename required"
puts "usage: -h -u -i -s filename"
end
begin/end
innerhalb einerbegin/end while 1
block? o_O Wie wäreloop
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werde ich Antwort von der Empfehlung mit Blick auf die neue-ish "slop" gem. Es ist ein wrapper um
getoptlong
.Können Sie
gem install slop
wenn Sie mit RVM, odersudo gem install slop
sonst.GetOptLong ist sehr mächtig, aber, aber ich habe es mehrmals, dass ich noch gehen, überprüfen Sie die docs jedes mal.
Wenn Sie wollen ein bisschen mehr power, ein "leichter, um Schnittstelle zu verwenden, als GetOptLong", Blick in Rubys
OptionParser
. Sie benötigen, um die Logik besser, aber dies ist eine schnelle pass-converting-code. Ich hatte die stub-Klasse für den CommonLog gem, weil ich benutze es nicht. Die wichtigen Dinge folgt die Linie ziehen Protokoll vonARGV
:Auch, als eine schnelle Kritik, die Sie nicht schreiben idiomatische Ruby-code:
when
- Anweisungen geschrieben werden kann:when "-h", "--help"
if ARGV[0] == nil || ARGV.size != 1
ist verworren. Studie auf, wie ARGV und arrays arbeiten. Normalerweise, fürARGV[0]
zu null-es werden keine Argumente mehr, alsoARGV.empty?
würde vermutlich ausreichen.