зеркало из https://github.com/github/ruby.git
381 строка
9.6 KiB
Plaintext
381 строка
9.6 KiB
Plaintext
== Argument Converters
|
|
|
|
An option can specify that its argument is to be converted
|
|
from the default +String+ to an instance of another class.
|
|
|
|
=== Contents
|
|
|
|
- {Built-In Argument Converters}[#label-Built-In+Argument+Converters]
|
|
- {Date}[#label-Date]
|
|
- {DateTime}[#label-DateTime]
|
|
- {Time}[#label-Time]
|
|
- {URI}[#label-URI]
|
|
- {Shellwords}[#label-Shellwords]
|
|
- {Integer}[#label-Integer]
|
|
- {Float}[#label-Float]
|
|
- {Numeric}[#label-Numeric]
|
|
- {DecimalInteger}[#label-DecimalInteger]
|
|
- {OctalInteger}[#label-OctalInteger]
|
|
- {DecimalNumeric}[#label-DecimalNumeric]
|
|
- {TrueClass}[#label-TrueClass]
|
|
- {FalseClass}[#label-FalseClass]
|
|
- {Object}[#label-Object]
|
|
- {String}[#label-String]
|
|
- {Array}[#label-Array]
|
|
- {Regexp}[#label-Regexp]
|
|
- {Custom Argument Converters}[#label-Custom+Argument+Converters]
|
|
|
|
=== Built-In Argument Converters
|
|
|
|
+OptionParser+ has a number of built-in argument converters,
|
|
which are demonstrated below.
|
|
|
|
==== +Date+
|
|
|
|
File +date.rb+
|
|
defines an option whose argument is to be converted to a +Date+ object.
|
|
The argument is converted by method Date#parse.
|
|
|
|
:include: ruby/date.rb
|
|
|
|
Executions:
|
|
|
|
$ ruby date.rb --date 2001-02-03
|
|
[#<Date: 2001-02-03 ((2451944j,0s,0n),+0s,2299161j)>, Date]
|
|
$ ruby date.rb --date 20010203
|
|
[#<Date: 2001-02-03 ((2451944j,0s,0n),+0s,2299161j)>, Date]
|
|
$ ruby date.rb --date "3rd Feb 2001"
|
|
[#<Date: 2001-02-03 ((2451944j,0s,0n),+0s,2299161j)>, Date]
|
|
|
|
==== +DateTime+
|
|
|
|
File +datetime.rb+
|
|
defines an option whose argument is to be converted to a +DateTime+ object.
|
|
The argument is converted by method DateTime#parse.
|
|
|
|
:include: ruby/datetime.rb
|
|
|
|
Executions:
|
|
|
|
$ ruby datetime.rb --datetime 2001-02-03T04:05:06+07:00
|
|
[#<DateTime: 2001-02-03T04:05:06+07:00 ((2451943j,75906s,0n),+25200s,2299161j)>, DateTime]
|
|
$ ruby datetime.rb --datetime 20010203T040506+0700
|
|
[#<DateTime: 2001-02-03T04:05:06+07:00 ((2451943j,75906s,0n),+25200s,2299161j)>, DateTime]
|
|
$ ruby datetime.rb --datetime "3rd Feb 2001 04:05:06 PM"
|
|
[#<DateTime: 2001-02-03T16:05:06+00:00 ((2451944j,57906s,0n),+0s,2299161j)>, DateTime]
|
|
|
|
==== +Time+
|
|
|
|
File +time.rb+
|
|
defines an option whose argument is to be converted to a +Time+ object.
|
|
The argument is converted by method Time#httpdate or Time#parse.
|
|
|
|
:include: ruby/time.rb
|
|
|
|
Executions:
|
|
|
|
$ ruby time.rb --time "Thu, 06 Oct 2011 02:26:12 GMT"
|
|
[2011-10-06 02:26:12 UTC, Time]
|
|
$ ruby time.rb --time 2010-10-31
|
|
[2010-10-31 00:00:00 -0500, Time]
|
|
|
|
==== +URI+
|
|
|
|
File +uri.rb+
|
|
defines an option whose argument is to be converted to a +URI+ object.
|
|
The argument is converted by method URI#parse.
|
|
|
|
:include: ruby/uri.rb
|
|
|
|
Executions:
|
|
|
|
$ ruby uri.rb --uri https://github.com
|
|
[#<URI::HTTPS https://github.com>, URI::HTTPS]
|
|
$ ruby uri.rb --uri http://github.com
|
|
[#<URI::HTTP http://github.com>, URI::HTTP]
|
|
$ ruby uri.rb --uri file://~/var
|
|
[#<URI::File file://~/var>, URI::File]
|
|
|
|
==== +Shellwords+
|
|
|
|
File +shellwords.rb+
|
|
defines an option whose argument is to be converted to an +Array+ object by method
|
|
Shellwords#shellwords.
|
|
|
|
:include: ruby/shellwords.rb
|
|
|
|
Executions:
|
|
|
|
$ ruby shellwords.rb --shellwords "ruby my_prog.rb | less"
|
|
[["ruby", "my_prog.rb", "|", "less"], Array]
|
|
$ ruby shellwords.rb --shellwords "here are 'two words'"
|
|
[["here", "are", "two words"], Array]
|
|
|
|
==== +Integer+
|
|
|
|
File +integer.rb+
|
|
defines an option whose argument is to be converted to an +Integer+ object.
|
|
The argument is converted by method Kernel#Integer.
|
|
|
|
:include: ruby/integer.rb
|
|
|
|
Executions:
|
|
|
|
$ ruby integer.rb --integer 100
|
|
[100, Integer]
|
|
$ ruby integer.rb --integer -100
|
|
[-100, Integer]
|
|
$ ruby integer.rb --integer 0100
|
|
[64, Integer]
|
|
$ ruby integer.rb --integer 0x100
|
|
[256, Integer]
|
|
$ ruby integer.rb --integer 0b100
|
|
[4, Integer]
|
|
|
|
==== +Float+
|
|
|
|
File +float.rb+
|
|
defines an option whose argument is to be converted to a +Float+ object.
|
|
The argument is converted by method Kernel#Float.
|
|
|
|
:include: ruby/float.rb
|
|
|
|
Executions:
|
|
|
|
$ ruby float.rb --float 1
|
|
[1.0, Float]
|
|
$ ruby float.rb --float 3.14159
|
|
[3.14159, Float]
|
|
$ ruby float.rb --float 1.234E2
|
|
[123.4, Float]
|
|
$ ruby float.rb --float 1.234E-2
|
|
[0.01234, Float]
|
|
|
|
==== +Numeric+
|
|
|
|
File +numeric.rb+
|
|
defines an option whose argument is to be converted to an instance
|
|
of +Rational+, +Float+, or +Integer+.
|
|
The argument is converted by method Kernel#Rational,
|
|
Kernel#Float, or Kernel#Integer.
|
|
|
|
:include: ruby/numeric.rb
|
|
|
|
Executions:
|
|
|
|
$ ruby numeric.rb --numeric 1/3
|
|
[(1/3), Rational]
|
|
$ ruby numeric.rb --numeric 3.333E-1
|
|
[0.3333, Float]
|
|
$ ruby numeric.rb --numeric 3
|
|
[3, Integer]
|
|
|
|
==== +DecimalInteger+
|
|
|
|
File +decimal_integer.rb+
|
|
defines an option whose argument is to be converted to an +Integer+ object.
|
|
The argument is converted by method Kernel#Integer.
|
|
|
|
:include: ruby/decimal_integer.rb
|
|
|
|
The argument may not be in a binary or hexadecimal format;
|
|
a leading zero is ignored (not parsed as octal).
|
|
|
|
Executions:
|
|
|
|
$ ruby decimal_integer.rb --decimal_integer 100
|
|
[100, Integer]
|
|
$ ruby decimal_integer.rb --decimal_integer -100
|
|
[-100, Integer]
|
|
$ ruby decimal_integer.rb --decimal_integer 0100
|
|
[100, Integer]
|
|
$ ruby decimal_integer.rb --decimal_integer -0100
|
|
[-100, Integer]
|
|
|
|
==== +OctalInteger+
|
|
|
|
File +octal_integer.rb+
|
|
defines an option whose argument is to be converted to an +Integer+ object.
|
|
The argument is converted by method Kernel#Integer.
|
|
|
|
:include: ruby/octal_integer.rb
|
|
|
|
The argument may not be in a binary or hexadecimal format;
|
|
it is parsed as octal, regardless of whether it has a leading zero.
|
|
|
|
Executions:
|
|
|
|
$ ruby octal_integer.rb --octal_integer 100
|
|
[64, Integer]
|
|
$ ruby octal_integer.rb --octal_integer -100
|
|
[-64, Integer]
|
|
$ ruby octal_integer.rb --octal_integer 0100
|
|
[64, Integer]
|
|
|
|
==== +DecimalNumeric+
|
|
|
|
File +decimal_numeric.rb+
|
|
defines an option whose argument is to be converted to an +Integer+ object.
|
|
The argument is converted by method Kernel#Integer
|
|
|
|
:include: ruby/decimal_numeric.rb
|
|
|
|
The argument may not be in a binary or hexadecimal format;
|
|
a leading zero causes the argument to be parsed as octal.
|
|
|
|
Executions:
|
|
|
|
$ ruby decimal_numeric.rb --decimal_numeric 100
|
|
[100, Integer]
|
|
$ ruby decimal_numeric.rb --decimal_numeric -100
|
|
[-100, Integer]
|
|
$ ruby decimal_numeric.rb --decimal_numeric 0100
|
|
[64, Integer]
|
|
|
|
==== +TrueClass+
|
|
|
|
File +true_class.rb+
|
|
defines an option whose argument is to be converted to +true+ or +false+.
|
|
The argument is evaluated by method Object#nil?.
|
|
|
|
:include: ruby/true_class.rb
|
|
|
|
The argument may be any of those shown in the examples below.
|
|
|
|
Executions:
|
|
|
|
$ ruby true_class.rb --true_class true
|
|
[true, TrueClass]
|
|
$ ruby true_class.rb --true_class yes
|
|
[true, TrueClass]
|
|
$ ruby true_class.rb --true_class +
|
|
[true, TrueClass]
|
|
$ ruby true_class.rb --true_class false
|
|
[false, FalseClass]
|
|
$ ruby true_class.rb --true_class no
|
|
[false, FalseClass]
|
|
$ ruby true_class.rb --true_class -
|
|
[false, FalseClass]
|
|
$ ruby true_class.rb --true_class nil
|
|
[false, FalseClass]
|
|
|
|
==== +FalseClass+
|
|
|
|
File +false_class.rb+
|
|
defines an option whose argument is to be converted to +true+ or +false+.
|
|
The argument is evaluated by method Object#nil?.
|
|
|
|
:include: ruby/false_class.rb
|
|
|
|
The argument may be any of those shown in the examples below.
|
|
|
|
Executions:
|
|
|
|
$ ruby false_class.rb --false_class false
|
|
[false, FalseClass]
|
|
$ ruby false_class.rb --false_class no
|
|
[false, FalseClass]
|
|
$ ruby false_class.rb --false_class -
|
|
[false, FalseClass]
|
|
$ ruby false_class.rb --false_class nil
|
|
[false, FalseClass]
|
|
$ ruby false_class.rb --false_class true
|
|
[true, TrueClass]
|
|
$ ruby false_class.rb --false_class yes
|
|
[true, TrueClass]
|
|
$ ruby false_class.rb --false_class +
|
|
[true, TrueClass]
|
|
|
|
==== +Object+
|
|
|
|
File +object.rb+
|
|
defines an option whose argument is not to be converted from +String+.
|
|
|
|
:include: ruby/object.rb
|
|
|
|
Executions:
|
|
|
|
$ ruby object.rb --object foo
|
|
["foo", String]
|
|
$ ruby object.rb --object nil
|
|
["nil", String]
|
|
|
|
==== +String+
|
|
|
|
File +string.rb+
|
|
defines an option whose argument is not to be converted from +String+.
|
|
|
|
:include: ruby/string.rb
|
|
|
|
Executions:
|
|
|
|
$ ruby string.rb --string foo
|
|
["foo", String]
|
|
$ ruby string.rb --string nil
|
|
["nil", String]
|
|
|
|
==== +Array+
|
|
|
|
File +array.rb+
|
|
defines an option whose argument is to be converted from +String+
|
|
to an array of strings, based on comma-separated substrings.
|
|
|
|
:include: ruby/array.rb
|
|
|
|
Executions:
|
|
|
|
$ ruby array.rb --array ""
|
|
[[], Array]
|
|
$ ruby array.rb --array foo,bar,baz
|
|
[["foo", "bar", "baz"], Array]
|
|
$ ruby array.rb --array "foo, bar, baz"
|
|
[["foo", " bar", " baz"], Array]
|
|
|
|
==== +Regexp+
|
|
|
|
File +regexp.rb+
|
|
defines an option whose argument is to be converted to a +Regexp+ object.
|
|
|
|
:include: ruby/regexp.rb
|
|
|
|
Executions:
|
|
|
|
$ ruby regexp.rb --regexp foo
|
|
|
|
=== Custom Argument Converters
|
|
|
|
You can create custom argument converters.
|
|
To create a custom converter, call OptionParser#accept with:
|
|
|
|
- An identifier, which may be any object.
|
|
- An optional match pattern, which defaults to <tt>/.*/m</tt>.
|
|
- A block that accepts the argument and returns the converted value.
|
|
|
|
This custom converter accepts any argument and converts it,
|
|
if possible, to a +Complex+ object.
|
|
|
|
:include: ruby/custom_converter.rb
|
|
|
|
Executions:
|
|
|
|
$ ruby custom_converter.rb --complex 0
|
|
[(0+0i), Complex]
|
|
$ ruby custom_converter.rb --complex 1
|
|
[(1+0i), Complex]
|
|
$ ruby custom_converter.rb --complex 1+2i
|
|
[(1+2i), Complex]
|
|
$ ruby custom_converter.rb --complex 0.3-0.5i
|
|
[(0.3-0.5i), Complex]
|
|
|
|
This custom converter accepts any 1-word argument
|
|
and capitalizes it, if possible.
|
|
|
|
:include: ruby/match_converter.rb
|
|
|
|
Executions:
|
|
|
|
$ ruby match_converter.rb --capitalize foo
|
|
["Foo", String]
|
|
$ ruby match_converter.rb --capitalize "foo bar"
|
|
match_converter.rb:9:in `<main>': invalid argument: --capitalize foo bar (OptionParser::InvalidArgument)
|