class Optimist::Option

def self.create(name, desc="", opts={}, settings={})

set the option's type.
parsers (e.g. Slop) because we allow the +default:+ to be able to
to +Optimist::opt+. This is trickier in Optimist, than other cmdline
Determines which type of object to create based on arguments passed
def self.create(name, desc="", opts={}, settings={})
  opttype = Optimist::Parser.registry_getopttype(opts[:type])
  opttype_from_default = get_klass_from_default(opts, opttype)
  raise ArgumentError, ":type specification and default type don't match (default type is #{opttype_from_default.class})" if opttype && opttype_from_default && (opttype.class != opttype_from_default.class)
  opt_inst = (opttype || opttype_from_default || Optimist::BooleanOption.new)
  ## fill in :long
  opt_inst.long = handle_long_opt(opts[:long], name)
  ## fill in :short
  opt_inst.short = handle_short_opt(opts[:short])
  ## fill in :multi
  multi_given = opts[:multi] || false
  opt_inst.multi_given = multi_given
  ## fill in :default for flags
  defvalue = opts[:default] || opt_inst.default
  ## autobox :default for :multi (multi-occurrence) arguments
  defvalue = [defvalue] if defvalue && multi_given && !defvalue.kind_of?(Array)
  opt_inst.default = defvalue
  opt_inst.name = name
  opt_inst.opts = opts
  opt_inst
end