Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
optparse: Arguments as Arguments Unexpectedness
Ben Woodcroft
5/20/2009 11:35:00 AM
Hi,
I am trying to use the standard optionparser to read in some arguments,
but one of those arguments is an argument itself. Is this a bug?
opt.rb:
require 'optparse'
OptionParser.new do |opts|
opts.on('-a','--args [ARGUMENTS]',String,"arguments") {|v| puts "Found:
#{v}"}
end.parse!
EXPECTED:
$ ruby opt.rb -a "-d me"
Found: -d me
ACTUAL:
$ ruby opt.rb -a "-d me"
Found:
/usr/lib/ruby/1.8/optparse.rb:1445:in `complete': invalid option: -d me
(OptionParser::InvalidOption)
from /usr/lib/ruby/1.8/optparse.rb:1443:in `catch'
from /usr/lib/ruby/1.8/optparse.rb:1443:in `complete'
from /usr/lib/ruby/1.8/optparse.rb:1282:in `parse_in_order'
from /usr/lib/ruby/1.8/optparse.rb:1249:in `catch'
from /usr/lib/ruby/1.8/optparse.rb:1249:in `parse_in_order'
from /usr/lib/ruby/1.8/optparse.rb:1243:in `order!'
from /usr/lib/ruby/1.8/optparse.rb:1334:in `permute!'
from /usr/lib/ruby/1.8/optparse.rb:1355:in `parse!'
from opt.rb:3
--
Posted via
http://www.ruby-...
.
2 Answers
Brian Candler
5/20/2009 12:28:00 PM
0
Ben Woodcroft wrote:
> I am trying to use the standard optionparser to read in some arguments,
> but one of those arguments is an argument itself. Is this a bug?
I don't think so. I think it's an ambiguity because you have declared
your -a flag to take an *optional* argument.
Suppose your OptionParser also honoured the -d option. It would need to
choose between "-a" with argument "-d me", and "-a" with no argument
followed by option "-d" with argument "me". OptionParser is taking the
view that anything which starts with a dash in that case is intended to
be the next option on the line. Otherwise, the argument to the -a flag
would hardly be optional if it always consumed the next string.
If your -a option *always* takes an argument, then declare it as such,
without the square brackets:
require 'optparse'
OptionParser.new do |opts|
opts.on('-a','--args ARGUMENTS',String,"arguments") {|v| puts "Found:
#{v}"}
end.parse!
$ ruby opt.rb -a "-d me"
Found:
-d me
Otherwise, your original code works as long as you include the flag and
its argument in the same position.
$ ruby opt.rb "-a-d me"
Found:
-d me
--
Posted via
http://www.ruby-...
.
Ben Woodcroft
5/20/2009 12:50:00 PM
0
Brian Candler wrote:
> If your -a option *always* takes an argument, then declare it as such,
> without the square brackets:
Thanks for the quick, informative answer and sorry for the stupidity.
ben
--
Posted via
http://www.ruby-...
.
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
optparse: Arguments as Arguments Unexpectedness
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password