MST
星途 面试题库

面试题:Ruby命令行参数解析的优化与扩展

假设已有一个Ruby程序用于处理图片文件,通过命令行参数接收图片路径进行处理。现在要求对其命令行参数解析部分进行优化,支持类似GNU工具的长选项(如 --verbose ),同时添加一个功能:可以通过命令行参数指定处理图片的并发数。请详细说明设计思路并给出关键代码片段。
11.7万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 使用Gem:Ruby 标准库中没有专门处理复杂命令行参数解析的库,可使用 optparse Gem来解析命令行参数。它可以方便地处理长选项(如 --verbose)和短选项(如 -v)。
  2. 设置默认值:为并发数设置一个合理的默认值,以防用户未指定。
  3. 解析逻辑:解析命令行参数,识别长选项和并发数参数,并处理图片路径参数。

关键代码片段

require 'optparse'

options = {
  verbose: false,
  concurrency: 1 # 默认并发数为1
}

optparse = OptionParser.new do |opts|
  opts.banner = "Usage: your_script.rb [options] image_path1 image_path2 ..."

  opts.on('-v', '--verbose', '启用详细输出') do
    options[:verbose] = true
  end

  opts.on('-c', '--concurrency CONCURRENCY', Integer, '指定处理图片的并发数') do |concurrency|
    options[:concurrency] = concurrency
  end
end

optparse.parse!

image_paths = ARGV

if image_paths.empty?
  $stderr.puts "错误: 未指定图片路径"
  $stderr.puts optparse
  exit 1
end

# 使用解析后的选项
if options[:verbose]
  puts "详细输出模式已启用"
end

puts "并发数设置为: #{options[:concurrency]}"

# 处理图片逻辑
image_paths.each do |path|
  # 这里放置处理图片的实际代码,例如使用合适的图片处理库
  puts "处理图片: #{path} (并发数: #{options[:concurrency]})"
end

此代码首先设置了默认选项,然后使用 OptionParser 解析命令行参数。它处理了 --verbose 选项来启用详细输出,并使用 --concurrency 选项来设置并发数。最后,它获取并验证了图片路径参数,并可以在后续逻辑中使用解析后的选项来处理图片。