2014-10-08 59 views
0

對不起,如果這是一個明顯的問題,但optparse的文檔是非常糟糕的,我似乎無法理解它。我只是有一個簡單的問題。我可以執行使用optparse像這樣的方法:OptionsParser執行方法?

dns = DNS.new 

options = {} 

optparse = OptionParser.new do |opts| 
opts.banner = $usage 

options[:standard] = false 
opts.on('a', '--standard', 'Standard DNS Query') do 
    options[:standard] = true 
end 

options[:mail] = false 
opts.on('mx', '--mail', 'MX Server Query') do 
    options[:mail] = true 
end 

options[:reverse] = false 
opts.on('ptr', '--reverse', 'Reverse DNS Lookup') do 
    options[:reverse] = true 
end 

opts.on('-h', '--help', 'Display usage') do 
    puts opts 
    exit 
end 
end 

optparse.parse! 


ARGV.each do |arg| 
    puts "Querying #{arg}" 
    dns.a_records(arg) if options[:standard] 
    dns.mx_records(arg) if options[:mail] 
    dns.ptr_records(arg) if options[:reverse] 
end 

它似乎並不像我一樣還是我做錯了。因爲實際發生的唯一情況是打印字符串「Querying#{arg}」。

+0

您可能會在此處錯誤地聲明您的參數。 「--help」顯示什麼?據我所知,所有的參數都應該遵循像'-h'這樣的格式,單破折號+單字母和雙破折號+多字母。 – tadman 2014-10-08 20:45:40

回答

0

你的例子幾乎適用於我。您需要更改的唯一方法是在「 - 」前面加上簡短的選項名稱。即

opts.on('-a', '--standard', 'Standard DNS Query') 

代替

opts.on('a', '--standard', 'Standard DNS Query') 

這樣<your_program> something -a就已經定義了:standard選項。如果您只保留aopts.on它將在您的週期中被識別爲另一個arg,而不是作爲選項。

+0

這太尷尬了,太簡單了。這正是問題所在,謝謝。 – user3408678 2014-10-08 21:41:50