#自定义转换器 1 opts.accept(Hash) do |string| 2 hash = {} 3 string.split(',').each do |pair| 4 key,value = pair.split(/:/) 5 hash[key] = value 6 end 7 hash 8 end 9 opts.on('--custom ATTRS',Hash) do |hash|10 custom_attributes = hash11 end12 A command like foo --custom foo:bar,baz:quux will result in custom_attributes getting the value13 { 'foo' => 'bar', 'baz' => 'quux' } .
使用小记
1 #!/usr/bin/env ruby 2 require 'optparse' 3 options = {} 4 option_parser = OptionParser.new do |opts| 5 # 创建option -switch 6 #Option 作为switch,不带argument,用于将 switch 设置成 true 或 false 7 opts.on("-i", "--iteration") { options[:iteration] = true } 8 9 10 # 创建optin -flag11 opts.on("-u USER", /^(.+)\.(.+)$/) do |user|12 options[:user] = user13 end14 opts.on("-p PASSWORD", "--uname ppp") do |password, ppp|15 16 options[:uname] = ppp17 options[:password] = password18 end19 20 #hash21 servers = {dev: '127.0.0.1',22 qa: 'qa001.example.com',23 prod: 'www.example.com'}24 opts.on('--server SERVER', servers) do |address|25 options[:address]=address26 end27 28 #default true or false29 opts.on('--[no-]verbose') do |flg|30 options[:flg]=flg31 end32 # Option 作为 flag,带一组用逗号分割的arguments,用于将arguments作为数组解析33 opts.on('-a A,B', '--array A,B', Array, 'List of arguments') do |value|34 options[:array] = value35 end36 end37 38 option_parser.parse!39 puts options.inspect