gpt4 book ai didi

ruby - 如何在 ruby​​ 中使用 getoptlong 类?

转载 作者:数据小太阳 更新时间:2023-10-29 07:04:30 25 4
gpt4 key购买 nike

我需要有关在 Ruby 中使用 getoptlong 类的帮助。我需要执行命令 prog_name.ruby -u -i -s 文件名。到目前为止,我只能使用 prog_name.ruby -u 文件名 -i 文件名 -s 文件名来执行它。

这是我的 getoptlong 代码:

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

最佳答案

我将通过推荐查看新的“slop”gem 来回答。它是 getoptlong 的包装器。

如果您使用的是 RVM,则可以使用 gem install slop,否则可以使用 sudo gem install slop

GetOptLong很强大,虽然用了好几次了,每次还是要去看文档。

如果您想要更强大的功能,使用“比 GetOptLong 更易于使用的界面”,请查看 Ruby 的 OptionParser .您需要更好地制定逻辑,但这是转换代码的快速 channel 。我不得不为 CommonLog gem 创建一个类,因为我不使用它。重要的内容遵循从 ARGV 中提取日志的行:

require 'optparse'

class CommonLog
def initialize(*args); end
def urlReport(); puts "running urlReport()"; end
def ipReport(); puts "running ipReport()"; end
def statReport(arg); puts "running statReport(#{arg})"; end
end

log = CommonLog.new(ARGV[0])

OptionParser.new { |opts|
opts.banner = "Usage: #{File.basename($0)} -u -i -s filename"

opts.on( '-u', '--[no-]url', 'some short text describing URL') do
log.urlReport()
end

opts.on('-i', '--[no-]ip', 'some short text describing IP') do
log.ipReport()
end

opts.on('-s', '--stat FILENAME', 'some short text describing STAT') do |arg|
log.statReport(arg)
end
}.parse!

此外,作为快速批评,您没有编写惯用的 Ruby 代码:

  • when语句可以这样写:when "-h", "--help"
  • 如果 ARGV[0] == nil || ARGV.size != 1 很复杂。研究 ARGV 和阵列的工作原理。通常,如果 ARGV[0] 为 nil,则不会有更多参数,因此 ARGV.empty? 可能就足够了。

关于ruby - 如何在 ruby​​ 中使用 getoptlong 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5688685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com