[DOC] Adjust heading levels

So that the first headings would be the top-most headings.
This commit is contained in:
Nobuyoshi Nakada 2023-11-14 15:39:10 +09:00
parent caa9881fde
commit 19a7a7660c
No known key found for this signature in database
GPG Key ID: 3582D74E1FEE4465
12 changed files with 177 additions and 177 deletions

View File

@ -1,4 +1,4 @@
== Binary Searching = Binary Searching
A few Ruby methods support binary searching in a collection: A few Ruby methods support binary searching in a collection:

View File

@ -1,4 +1,4 @@
== Case Mapping = Case Mapping
Some string-oriented methods use case mapping. Some string-oriented methods use case mapping.
@ -24,7 +24,7 @@ In Symbol:
- Symbol#swapcase - Symbol#swapcase
- Symbol#upcase - Symbol#upcase
=== Default Case Mapping == Default Case Mapping
By default, all of these methods use full Unicode case mapping, By default, all of these methods use full Unicode case mapping,
which is suitable for most languages. which is suitable for most languages.
@ -60,7 +60,7 @@ Case changes may not be reversible:
Case changing methods may not maintain Unicode normalization. Case changing methods may not maintain Unicode normalization.
See String#unicode_normalize). See String#unicode_normalize).
=== Options for Case Mapping == Options for Case Mapping
Except for +casecmp+ and +casecmp?+, Except for +casecmp+ and +casecmp?+,
each of the case-mapping methods listed above each of the case-mapping methods listed above

View File

@ -1,6 +1,6 @@
== Character Selectors = Character Selectors
=== Character Selector == Character Selector
A _character_ _selector_ is a string argument accepted by certain Ruby methods. A _character_ _selector_ is a string argument accepted by certain Ruby methods.
Each of these instance methods accepts one or more character selectors: Each of these instance methods accepts one or more character selectors:
@ -70,7 +70,7 @@ In a character selector, these three characters get special treatment:
"hello\r\nworld".delete("\\r") # => "hello\r\nwold" "hello\r\nworld".delete("\\r") # => "hello\r\nwold"
"hello\r\nworld".delete("\\\r") # => "hello\nworld" "hello\r\nworld".delete("\\\r") # => "hello\nworld"
=== Multiple Character Selectors == Multiple Character Selectors
These instance methods accept multiple character selectors: These instance methods accept multiple character selectors:

View File

@ -1,4 +1,4 @@
== Command Injection = Command Injection
Some Ruby core methods accept string data Some Ruby core methods accept string data
that includes text to be executed as a system command. that includes text to be executed as a system command.

View File

@ -1,6 +1,6 @@
== Encodings = Encodings
=== The Basics == The Basics
A {character encoding}[https://en.wikipedia.org/wiki/Character_encoding], A {character encoding}[https://en.wikipedia.org/wiki/Character_encoding],
often shortened to _encoding_, is a mapping between: often shortened to _encoding_, is a mapping between:
@ -30,9 +30,9 @@ Other characters, such as the Euro symbol, are multi-byte:
s = "\u20ac" # => "€" s = "\u20ac" # => "€"
s.bytes # => [226, 130, 172] s.bytes # => [226, 130, 172]
=== The \Encoding \Class == The \Encoding \Class
==== \Encoding Objects === \Encoding Objects
Ruby encodings are defined by constants in class \Encoding. Ruby encodings are defined by constants in class \Encoding.
There can be only one instance of \Encoding for each of these constants. There can be only one instance of \Encoding for each of these constants.
@ -43,7 +43,7 @@ There can be only one instance of \Encoding for each of these constants.
Encoding.list.take(3) Encoding.list.take(3)
# => [#<Encoding:ASCII-8BIT>, #<Encoding:UTF-8>, #<Encoding:US-ASCII>] # => [#<Encoding:ASCII-8BIT>, #<Encoding:UTF-8>, #<Encoding:US-ASCII>]
==== Names and Aliases === Names and Aliases
\Method Encoding#name returns the name of an \Encoding: \Method Encoding#name returns the name of an \Encoding:
@ -78,7 +78,7 @@ because it includes both the names and their aliases.
Encoding.find("US-ASCII") # => #<Encoding:US-ASCII> Encoding.find("US-ASCII") # => #<Encoding:US-ASCII>
Encoding.find("US-ASCII").class # => Encoding Encoding.find("US-ASCII").class # => Encoding
==== Default Encodings === Default Encodings
\Method Encoding.find, above, also returns a default \Encoding \Method Encoding.find, above, also returns a default \Encoding
for each of these special names: for each of these special names:
@ -118,7 +118,7 @@ for each of these special names:
Encoding.default_internal = 'US-ASCII' # => "US-ASCII" Encoding.default_internal = 'US-ASCII' # => "US-ASCII"
Encoding.default_internal # => #<Encoding:US-ASCII> Encoding.default_internal # => #<Encoding:US-ASCII>
==== Compatible Encodings === Compatible Encodings
\Method Encoding.compatible? returns whether two given objects are encoding-compatible \Method Encoding.compatible? returns whether two given objects are encoding-compatible
(that is, whether they can be concatenated); (that is, whether they can be concatenated);
@ -132,7 +132,7 @@ returns the \Encoding of the concatenated string, or +nil+ if incompatible:
s1 = "\xa1\xa1".force_encoding('euc-jp') # => "\x{A1A1}" s1 = "\xa1\xa1".force_encoding('euc-jp') # => "\x{A1A1}"
Encoding.compatible?(s0, s1) # => nil Encoding.compatible?(s0, s1) # => nil
=== \String \Encoding == \String \Encoding
A Ruby String object has an encoding that is an instance of class \Encoding. A Ruby String object has an encoding that is an instance of class \Encoding.
The encoding may be retrieved by method String#encoding. The encoding may be retrieved by method String#encoding.
@ -183,7 +183,7 @@ Here are a couple of useful query methods:
s = "\xc2".force_encoding("UTF-8") # => "\xC2" s = "\xc2".force_encoding("UTF-8") # => "\xC2"
s.valid_encoding? # => false s.valid_encoding? # => false
=== \Symbol and \Regexp Encodings == \Symbol and \Regexp Encodings
The string stored in a Symbol or Regexp object also has an encoding; The string stored in a Symbol or Regexp object also has an encoding;
the encoding may be retrieved by method Symbol#encoding or Regexp#encoding. the encoding may be retrieved by method Symbol#encoding or Regexp#encoding.
@ -194,20 +194,20 @@ The default encoding for these, however, is:
- The script encoding, otherwise; - The script encoding, otherwise;
see (Script Encoding)[rdoc-ref:encodings.rdoc@Script+Encoding]. see (Script Encoding)[rdoc-ref:encodings.rdoc@Script+Encoding].
=== Filesystem \Encoding == Filesystem \Encoding
The filesystem encoding is the default \Encoding for a string from the filesystem: The filesystem encoding is the default \Encoding for a string from the filesystem:
Encoding.find("filesystem") # => #<Encoding:UTF-8> Encoding.find("filesystem") # => #<Encoding:UTF-8>
=== Locale \Encoding == Locale \Encoding
The locale encoding is the default encoding for a string from the environment, The locale encoding is the default encoding for a string from the environment,
other than from the filesystem: other than from the filesystem:
Encoding.find('locale') # => #<Encoding:IBM437> Encoding.find('locale') # => #<Encoding:IBM437>
=== Stream Encodings == Stream Encodings
Certain stream objects can have two encodings; these objects include instances of: Certain stream objects can have two encodings; these objects include instances of:
@ -222,7 +222,7 @@ The two encodings are:
- An _internal_ _encoding_, which (if not +nil+) specifies the encoding - An _internal_ _encoding_, which (if not +nil+) specifies the encoding
to be used for the string constructed from the stream. to be used for the string constructed from the stream.
==== External \Encoding === External \Encoding
The external encoding, which is an \Encoding object, specifies how bytes read The external encoding, which is an \Encoding object, specifies how bytes read
from the stream are to be interpreted as characters. from the stream are to be interpreted as characters.
@ -250,7 +250,7 @@ For an \IO, \File, \ARGF, or \StringIO object, the external encoding may be set
- \Methods +set_encoding+ or (except for \ARGF) +set_encoding_by_bom+. - \Methods +set_encoding+ or (except for \ARGF) +set_encoding_by_bom+.
==== Internal \Encoding === Internal \Encoding
The internal encoding, which is an \Encoding object or +nil+, The internal encoding, which is an \Encoding object or +nil+,
specifies how characters read from the stream specifies how characters read from the stream
@ -276,7 +276,7 @@ For an \IO, \File, \ARGF, or \StringIO object, the internal encoding may be set
- \Method +set_encoding+. - \Method +set_encoding+.
=== Script \Encoding == Script \Encoding
A Ruby script has a script encoding, which may be retrieved by: A Ruby script has a script encoding, which may be retrieved by:
@ -291,7 +291,7 @@ followed by a colon, space and the Encoding name or alias:
# encoding: ISO-8859-1 # encoding: ISO-8859-1
__ENCODING__ #=> #<Encoding:ISO-8859-1> __ENCODING__ #=> #<Encoding:ISO-8859-1>
=== Transcoding == Transcoding
_Transcoding_ is the process of changing a sequence of characters _Transcoding_ is the process of changing a sequence of characters
from one encoding to another. from one encoding to another.
@ -302,7 +302,7 @@ but the bytes that represent them may change.
The handling for characters that cannot be represented in the destination encoding The handling for characters that cannot be represented in the destination encoding
may be specified by @Encoding+Options. may be specified by @Encoding+Options.
==== Transcoding a \String === Transcoding a \String
Each of these methods transcodes a string: Each of these methods transcodes a string:
@ -317,7 +317,7 @@ Each of these methods transcodes a string:
- String#unicode_normalize!: Like String#unicode_normalize, - String#unicode_normalize!: Like String#unicode_normalize,
but transcodes +self+ in place. but transcodes +self+ in place.
=== Transcoding a Stream == Transcoding a Stream
Each of these methods may transcode a stream; Each of these methods may transcode a stream;
whether it does so depends on the external and internal encodings: whether it does so depends on the external and internal encodings:
@ -352,7 +352,7 @@ Output:
"R\xE9sum\xE9" "R\xE9sum\xE9"
"Résumé" "Résumé"
=== \Encoding Options == \Encoding Options
A number of methods in the Ruby core accept keyword arguments as encoding options. A number of methods in the Ruby core accept keyword arguments as encoding options.

View File

@ -1,4 +1,4 @@
== Format Specifications = Format Specifications
Several Ruby core classes have instance method +printf+ or +sprintf+: Several Ruby core classes have instance method +printf+ or +sprintf+:
@ -37,12 +37,12 @@ It consists of:
Except for the leading percent character, Except for the leading percent character,
the only required part is the type specifier, so we begin with that. the only required part is the type specifier, so we begin with that.
=== Type Specifiers == Type Specifiers
This section provides a brief explanation of each type specifier. This section provides a brief explanation of each type specifier.
The links lead to the details and examples. The links lead to the details and examples.
==== \Integer Type Specifiers === \Integer Type Specifiers
- +b+ or +B+: Format +argument+ as a binary integer. - +b+ or +B+: Format +argument+ as a binary integer.
See {Specifiers b and B}[rdoc-ref:format_specifications.rdoc@Specifiers+b+and+B]. See {Specifiers b and B}[rdoc-ref:format_specifications.rdoc@Specifiers+b+and+B].
@ -54,7 +54,7 @@ The links lead to the details and examples.
- +x+ or +X+: Format +argument+ as a hexadecimal integer. - +x+ or +X+: Format +argument+ as a hexadecimal integer.
See {Specifiers x and X}[rdoc-ref:format_specifications.rdoc@Specifiers+x+and+X]. See {Specifiers x and X}[rdoc-ref:format_specifications.rdoc@Specifiers+x+and+X].
==== Floating-Point Type Specifiers === Floating-Point Type Specifiers
- +a+ or +A+: Format +argument+ as hexadecimal floating-point number. - +a+ or +A+: Format +argument+ as hexadecimal floating-point number.
See {Specifiers a and A}[rdoc-ref:format_specifications.rdoc@Specifiers+a+and+A]. See {Specifiers a and A}[rdoc-ref:format_specifications.rdoc@Specifiers+a+and+A].
@ -65,7 +65,7 @@ The links lead to the details and examples.
- +g+ or +G+: Format +argument+ in a "general" format. - +g+ or +G+: Format +argument+ in a "general" format.
See {Specifiers g and G}[rdoc-ref:format_specifications.rdoc@Specifiers+g+and+G]. See {Specifiers g and G}[rdoc-ref:format_specifications.rdoc@Specifiers+g+and+G].
==== Other Type Specifiers === Other Type Specifiers
- +c+: Format +argument+ as a character. - +c+: Format +argument+ as a character.
See {Specifier c}[rdoc-ref:format_specifications.rdoc@Specifier+c]. See {Specifier c}[rdoc-ref:format_specifications.rdoc@Specifier+c].
@ -76,7 +76,7 @@ The links lead to the details and examples.
- <tt>%</tt>: Format +argument+ (<tt>'%'</tt>) as a single percent character. - <tt>%</tt>: Format +argument+ (<tt>'%'</tt>) as a single percent character.
See {Specifier %}[rdoc-ref:format_specifications.rdoc@Specifier+-25]. See {Specifier %}[rdoc-ref:format_specifications.rdoc@Specifier+-25].
=== Flags == Flags
The effect of a flag may vary greatly among type specifiers. The effect of a flag may vary greatly among type specifiers.
These remarks are general in nature. These remarks are general in nature.
@ -85,7 +85,7 @@ See {type-specific details}[rdoc-ref:format_specifications.rdoc@Type+Specifier+D
Multiple flags may be given with single type specifier; Multiple flags may be given with single type specifier;
order does not matter. order does not matter.
==== <tt>' '</tt> Flag === <tt>' '</tt> Flag
Insert a space before a non-negative number: Insert a space before a non-negative number:
@ -97,49 +97,49 @@ Insert a minus sign for negative value:
sprintf('%d', -10) # => "-10" sprintf('%d', -10) # => "-10"
sprintf('% d', -10) # => "-10" sprintf('% d', -10) # => "-10"
==== <tt>'#'</tt> Flag === <tt>'#'</tt> Flag
Use an alternate format; varies among types: Use an alternate format; varies among types:
sprintf('%x', 100) # => "64" sprintf('%x', 100) # => "64"
sprintf('%#x', 100) # => "0x64" sprintf('%#x', 100) # => "0x64"
==== <tt>'+'</tt> Flag === <tt>'+'</tt> Flag
Add a leading plus sign for a non-negative number: Add a leading plus sign for a non-negative number:
sprintf('%x', 100) # => "64" sprintf('%x', 100) # => "64"
sprintf('%+x', 100) # => "+64" sprintf('%+x', 100) # => "+64"
==== <tt>'-'</tt> Flag === <tt>'-'</tt> Flag
Left justify the value in its field: Left justify the value in its field:
sprintf('%6d', 100) # => " 100" sprintf('%6d', 100) # => " 100"
sprintf('%-6d', 100) # => "100 " sprintf('%-6d', 100) # => "100 "
==== <tt>'0'</tt> Flag === <tt>'0'</tt> Flag
Left-pad with zeros instead of spaces: Left-pad with zeros instead of spaces:
sprintf('%6d', 100) # => " 100" sprintf('%6d', 100) # => " 100"
sprintf('%06d', 100) # => "000100" sprintf('%06d', 100) # => "000100"
==== <tt>'*'</tt> Flag === <tt>'*'</tt> Flag
Use the next argument as the field width: Use the next argument as the field width:
sprintf('%d', 20, 14) # => "20" sprintf('%d', 20, 14) # => "20"
sprintf('%*d', 20, 14) # => " 14" sprintf('%*d', 20, 14) # => " 14"
==== <tt>'n$'</tt> Flag === <tt>'n$'</tt> Flag
Format the (1-based) <tt>n</tt>th argument into this field: Format the (1-based) <tt>n</tt>th argument into this field:
sprintf("%s %s", 'world', 'hello') # => "world hello" sprintf("%s %s", 'world', 'hello') # => "world hello"
sprintf("%2$s %1$s", 'world', 'hello') # => "hello world" sprintf("%2$s %1$s", 'world', 'hello') # => "hello world"
=== Width Specifier == Width Specifier
In general, a width specifier determines the minimum width (in characters) In general, a width specifier determines the minimum width (in characters)
of the formatted field: of the formatted field:
@ -152,7 +152,7 @@ of the formatted field:
# Ignore if too small. # Ignore if too small.
sprintf('%1d', 100) # => "100" sprintf('%1d', 100) # => "100"
=== Precision Specifier == Precision Specifier
A precision specifier is a decimal point followed by zero or more A precision specifier is a decimal point followed by zero or more
decimal digits. decimal digits.
@ -194,9 +194,9 @@ the number of characters to write:
sprintf('%s', Time.now) # => "2022-05-04 11:59:16 -0400" sprintf('%s', Time.now) # => "2022-05-04 11:59:16 -0400"
sprintf('%.10s', Time.now) # => "2022-05-04" sprintf('%.10s', Time.now) # => "2022-05-04"
=== Type Specifier Details and Examples == Type Specifier Details and Examples
==== Specifiers +a+ and +A+ === Specifiers +a+ and +A+
Format +argument+ as hexadecimal floating-point number: Format +argument+ as hexadecimal floating-point number:
@ -209,7 +209,7 @@ Format +argument+ as hexadecimal floating-point number:
sprintf('%A', 4096) # => "0X1P+12" sprintf('%A', 4096) # => "0X1P+12"
sprintf('%A', -4096) # => "-0X1P+12" sprintf('%A', -4096) # => "-0X1P+12"
==== Specifiers +b+ and +B+ === Specifiers +b+ and +B+
The two specifiers +b+ and +B+ behave identically The two specifiers +b+ and +B+ behave identically
except when flag <tt>'#'</tt>+ is used. except when flag <tt>'#'</tt>+ is used.
@ -226,14 +226,14 @@ Format +argument+ as a binary integer:
sprintf('%#b', 4) # => "0b100" sprintf('%#b', 4) # => "0b100"
sprintf('%#B', 4) # => "0B100" sprintf('%#B', 4) # => "0B100"
==== Specifier +c+ === Specifier +c+
Format +argument+ as a single character: Format +argument+ as a single character:
sprintf('%c', 'A') # => "A" sprintf('%c', 'A') # => "A"
sprintf('%c', 65) # => "A" sprintf('%c', 65) # => "A"
==== Specifier +d+ === Specifier +d+
Format +argument+ as a decimal integer: Format +argument+ as a decimal integer:
@ -242,7 +242,7 @@ Format +argument+ as a decimal integer:
Flag <tt>'#'</tt> does not apply. Flag <tt>'#'</tt> does not apply.
==== Specifiers +e+ and +E+ === Specifiers +e+ and +E+
Format +argument+ in Format +argument+ in
{scientific notation}[https://en.wikipedia.org/wiki/Scientific_notation]: {scientific notation}[https://en.wikipedia.org/wiki/Scientific_notation]:
@ -250,7 +250,7 @@ Format +argument+ in
sprintf('%e', 3.14159) # => "3.141590e+00" sprintf('%e', 3.14159) # => "3.141590e+00"
sprintf('%E', -3.14159) # => "-3.141590E+00" sprintf('%E', -3.14159) # => "-3.141590E+00"
==== Specifier +f+ === Specifier +f+
Format +argument+ as a floating-point number: Format +argument+ as a floating-point number:
@ -259,7 +259,7 @@ Format +argument+ as a floating-point number:
Flag <tt>'#'</tt> does not apply. Flag <tt>'#'</tt> does not apply.
==== Specifiers +g+ and +G+ === Specifiers +g+ and +G+
Format +argument+ using exponential form (+e+/+E+ specifier) Format +argument+ using exponential form (+e+/+E+ specifier)
if the exponent is less than -4 or greater than or equal to the precision. if the exponent is less than -4 or greater than or equal to the precision.
@ -281,7 +281,7 @@ Otherwise format +argument+ using floating-point form (+f+ specifier):
sprintf('%#G', 100000000000) # => "1.00000E+11" sprintf('%#G', 100000000000) # => "1.00000E+11"
sprintf('%#G', 0.000000000001) # => "1.00000E-12" sprintf('%#G', 0.000000000001) # => "1.00000E-12"
==== Specifier +o+ === Specifier +o+
Format +argument+ as an octal integer. Format +argument+ as an octal integer.
If +argument+ is negative, it will be formatted as a two's complement If +argument+ is negative, it will be formatted as a two's complement
@ -296,14 +296,14 @@ prefixed with +..7+:
sprintf('%#o', 16) # => "020" sprintf('%#o', 16) # => "020"
sprintf('%#o', -16) # => "..760" sprintf('%#o', -16) # => "..760"
==== Specifier +p+ === Specifier +p+
Format +argument+ as a string via <tt>argument.inspect</tt>: Format +argument+ as a string via <tt>argument.inspect</tt>:
t = Time.now t = Time.now
sprintf('%p', t) # => "2022-05-01 13:42:07.1645683 -0500" sprintf('%p', t) # => "2022-05-01 13:42:07.1645683 -0500"
==== Specifier +s+ === Specifier +s+
Format +argument+ as a string via <tt>argument.to_s</tt>: Format +argument+ as a string via <tt>argument.to_s</tt>:
@ -312,7 +312,7 @@ Format +argument+ as a string via <tt>argument.to_s</tt>:
Flag <tt>'#'</tt> does not apply. Flag <tt>'#'</tt> does not apply.
==== Specifiers +x+ and +X+ === Specifiers +x+ and +X+
Format +argument+ as a hexadecimal integer. Format +argument+ as a hexadecimal integer.
If +argument+ is negative, it will be formatted as a two's complement If +argument+ is negative, it will be formatted as a two's complement
@ -329,7 +329,7 @@ prefixed with +..f+:
# Alternate format for negative value. # Alternate format for negative value.
sprintf('%#x', -100) # => "0x..f9c" sprintf('%#x', -100) # => "0x..f9c"
==== Specifier <tt>%</tt> === Specifier <tt>%</tt>
Format +argument+ (<tt>'%'</tt>) as a single percent character: Format +argument+ (<tt>'%'</tt>) as a single percent character:
@ -337,7 +337,7 @@ Format +argument+ (<tt>'%'</tt>) as a single percent character:
Flags do not apply. Flags do not apply.
=== Reference by Name == Reference by Name
For more complex formatting, Ruby supports a reference by name. For more complex formatting, Ruby supports a reference by name.
%<name>s style uses format style, but %{name} style doesn't. %<name>s style uses format style, but %{name} style doesn't.

View File

@ -1,4 +1,4 @@
== Pre-Defined Global Variables = Pre-Defined Global Variables
Some of the pre-defined global variables have synonyms Some of the pre-defined global variables have synonyms
that are available via module Engish. that are available via module Engish.
@ -8,9 +8,9 @@ To use the module:
require 'English' require 'English'
=== Exceptions == Exceptions
==== <tt>$!</tt> (\Exception) === <tt>$!</tt> (\Exception)
Contains the Exception object set by Kernel#raise: Contains the Exception object set by Kernel#raise:
@ -26,7 +26,7 @@ Output:
English - <tt>$ERROR_INFO</tt> English - <tt>$ERROR_INFO</tt>
==== <tt>$@</tt> (Backtrace) === <tt>$@</tt> (Backtrace)
Same as <tt>$!.backtrace</tt>; Same as <tt>$!.backtrace</tt>;
returns an array of backtrace positions: returns an array of backtrace positions:
@ -46,7 +46,7 @@ Output:
English - <tt>$ERROR_POSITION</tt>. English - <tt>$ERROR_POSITION</tt>.
=== Pattern Matching == Pattern Matching
These global variables store information about the most recent These global variables store information about the most recent
successful match in the current scope. successful match in the current scope.
@ -54,46 +54,46 @@ successful match in the current scope.
For details and examples, For details and examples,
see {Regexp Global Variables}[rdoc-ref:Regexp@Global+Variables]. see {Regexp Global Variables}[rdoc-ref:Regexp@Global+Variables].
==== <tt>$~</tt> (\MatchData) === <tt>$~</tt> (\MatchData)
MatchData object created from the match; MatchData object created from the match;
thread-local and frame-local. thread-local and frame-local.
English - <tt>$LAST_MATCH_INFO</tt>. English - <tt>$LAST_MATCH_INFO</tt>.
==== <tt>$&</tt> (Matched Substring) === <tt>$&</tt> (Matched Substring)
The matched string. The matched string.
English - <tt>$MATCH</tt>. English - <tt>$MATCH</tt>.
==== <tt>$`</tt> (Pre-Match Substring) === <tt>$`</tt> (Pre-Match Substring)
The string to the left of the match. The string to the left of the match.
English - <tt>$PREMATCH</tt>. English - <tt>$PREMATCH</tt>.
==== <tt>$'</tt> (Post-Match Substring) === <tt>$'</tt> (Post-Match Substring)
The string to the right of the match. The string to the right of the match.
English - <tt>$POSTMATCH</tt>. English - <tt>$POSTMATCH</tt>.
==== <tt>$+</tt> (Last Matched Group) === <tt>$+</tt> (Last Matched Group)
The last group matched. The last group matched.
English - <tt>$LAST_PAREN_MATCH</tt>. English - <tt>$LAST_PAREN_MATCH</tt>.
==== <tt>$1</tt>, <tt>$2</tt>, \Etc. (Matched Group) === <tt>$1</tt>, <tt>$2</tt>, \Etc. (Matched Group)
For <tt>$_n_</tt> the _nth_ group of the match. For <tt>$_n_</tt> the _nth_ group of the match.
No \English. No \English.
=== Separators == Separators
==== <tt>$/</tt> (Input Record Separator) === <tt>$/</tt> (Input Record Separator)
An input record separator, initially newline. An input record separator, initially newline.
@ -101,7 +101,7 @@ English - <tt>$INPUT_RECORD_SEPARATOR</tt>, <tt>$RS</tt>.
Aliased as <tt>$-0</tt>. Aliased as <tt>$-0</tt>.
==== <tt>$;</tt> (Input Field Separator) === <tt>$;</tt> (Input Field Separator)
An input field separator, initially +nil+. An input field separator, initially +nil+.
@ -109,76 +109,76 @@ English - <tt>$FIELD_SEPARATOR</tt>, <tt>$FS</tt>.
Aliased as <tt>$-F</tt>. Aliased as <tt>$-F</tt>.
==== <tt>$\\</tt> (Output Record Separator) === <tt>$\\</tt> (Output Record Separator)
An output record separator, initially +nil+. An output record separator, initially +nil+.
English - <tt>$OUTPUT_RECORD_SEPARATOR</tt>, <tt>$ORS</tt>. English - <tt>$OUTPUT_RECORD_SEPARATOR</tt>, <tt>$ORS</tt>.
=== Streams == Streams
==== <tt>$stdin</tt> (Standard Input) === <tt>$stdin</tt> (Standard Input)
The current standard input stream; initially: The current standard input stream; initially:
$stdin # => #<IO:<STDIN>> $stdin # => #<IO:<STDIN>>
==== <tt>$stdout</tt> (Standard Output) === <tt>$stdout</tt> (Standard Output)
The current standard output stream; initially: The current standard output stream; initially:
$stdout # => #<IO:<STDOUT>> $stdout # => #<IO:<STDOUT>>
==== <tt>$stderr</tt> (Standard Error) === <tt>$stderr</tt> (Standard Error)
The current standard error stream; initially: The current standard error stream; initially:
$stderr # => #<IO:<STDERR>> $stderr # => #<IO:<STDERR>>
==== <tt>$<</tt> (\ARGF or $stdin) === <tt>$<</tt> (\ARGF or $stdin)
Points to stream ARGF if not empty, else to stream $stdin; read-only. Points to stream ARGF if not empty, else to stream $stdin; read-only.
English - <tt>$DEFAULT_INPUT</tt>. English - <tt>$DEFAULT_INPUT</tt>.
==== <tt>$></tt> (Default Standard Output) === <tt>$></tt> (Default Standard Output)
An output stream, initially <tt>$stdout</tt>. An output stream, initially <tt>$stdout</tt>.
English - <tt>$DEFAULT_OUTPUT English - <tt>$DEFAULT_OUTPUT
==== <tt>$.</tt> (Input Position) === <tt>$.</tt> (Input Position)
The input position (line number) in the most recently read stream. The input position (line number) in the most recently read stream.
English - <tt>$INPUT_LINE_NUMBER</tt>, <tt>$NR</tt> English - <tt>$INPUT_LINE_NUMBER</tt>, <tt>$NR</tt>
==== <tt>$_</tt> (Last Read Line) === <tt>$_</tt> (Last Read Line)
The line (string) from the most recently read stream. The line (string) from the most recently read stream.
English - <tt>$LAST_READ_LINE</tt>. English - <tt>$LAST_READ_LINE</tt>.
=== Processes == Processes
==== <tt>$0</tt> === <tt>$0</tt>
Initially, contains the name of the script being executed; Initially, contains the name of the script being executed;
may be reassigned. may be reassigned.
==== <tt>$*</tt> (\ARGV) === <tt>$*</tt> (\ARGV)
Points to ARGV. Points to ARGV.
English - <tt>$ARGV</tt>. English - <tt>$ARGV</tt>.
==== <tt>$$</tt> (Process ID) === <tt>$$</tt> (Process ID)
The process ID of the current process. Same as Process.pid. The process ID of the current process. Same as Process.pid.
English - <tt>$PROCESS_ID</tt>, <tt>$PID</tt>. English - <tt>$PROCESS_ID</tt>, <tt>$PID</tt>.
==== <tt>$?</tt> (Child Status) === <tt>$?</tt> (Child Status)
Initially +nil+, otherwise the Process::Status object Initially +nil+, otherwise the Process::Status object
created for the most-recently exited child process; created for the most-recently exited child process;
@ -186,7 +186,7 @@ thread-local.
English - <tt>$CHILD_STATUS</tt>. English - <tt>$CHILD_STATUS</tt>.
==== <tt>$LOAD_PATH</tt> (Load Path) === <tt>$LOAD_PATH</tt> (Load Path)
Contains the array of paths to be searched Contains the array of paths to be searched
by Kernel#load and Kernel#require. by Kernel#load and Kernel#require.
@ -211,7 +211,7 @@ Examples:
Aliased as <tt>$:</tt> and <tt>$-I</tt>. Aliased as <tt>$:</tt> and <tt>$-I</tt>.
==== <tt>$LOADED_FEATURES</tt> === <tt>$LOADED_FEATURES</tt>
Contains an array of the paths to the loaded files: Contains an array of the paths to the loaded files:
@ -230,13 +230,13 @@ Contains an array of the paths to the loaded files:
Aliased as <tt>$"</tt>. Aliased as <tt>$"</tt>.
=== Debugging == Debugging
==== <tt>$FILENAME</tt> === <tt>$FILENAME</tt>
The value returned by method ARGF.filename. The value returned by method ARGF.filename.
==== <tt>$DEBUG</tt> === <tt>$DEBUG</tt>
Initially +true+ if command-line option <tt>-d</tt> or <tt>--debug</tt> is given, Initially +true+ if command-line option <tt>-d</tt> or <tt>--debug</tt> is given,
otherwise initially +false+; otherwise initially +false+;
@ -246,7 +246,7 @@ When +true+, prints each raised exception to <tt>$stderr</tt>.
Aliased as <tt>$-d</tt>. Aliased as <tt>$-d</tt>.
==== <tt>$VERBOSE</tt> === <tt>$VERBOSE</tt>
Initially +true+ if command-line option <tt>-v</tt> or <tt>-w</tt> is given, Initially +true+ if command-line option <tt>-v</tt> or <tt>-w</tt> is given,
otherwise initially +false+; otherwise initially +false+;
@ -258,58 +258,58 @@ When +nil+, disables warnings, including those from Kernel#warn.
Aliased as <tt>$-v</tt> and <tt>$-w</tt>. Aliased as <tt>$-v</tt> and <tt>$-w</tt>.
=== Other Variables == Other Variables
==== <tt>$-a</tt> === <tt>$-a</tt>
Whether command-line option <tt>-a</tt> was given; read-only. Whether command-line option <tt>-a</tt> was given; read-only.
==== <tt>$-i</tt> === <tt>$-i</tt>
Contains the extension given with command-line option <tt>-i</tt>, Contains the extension given with command-line option <tt>-i</tt>,
or +nil+ if none. or +nil+ if none.
An alias of ARGF.inplace_mode. An alias of ARGF.inplace_mode.
==== <tt>$-l</tt> === <tt>$-l</tt>
Whether command-line option <tt>-l</tt> was set; read-only. Whether command-line option <tt>-l</tt> was set; read-only.
==== <tt>$-p</tt> === <tt>$-p</tt>
Whether command-line option <tt>-p</tt> was given; read-only. Whether command-line option <tt>-p</tt> was given; read-only.
=== Deprecated == Deprecated
==== <tt>$=</tt> === <tt>$=</tt>
==== <tt>$,</tt> === <tt>$,</tt>
== Pre-Defined Global Constants = Pre-Defined Global Constants
== Streams = Streams
==== <tt>STDIN</tt> === <tt>STDIN</tt>
The standard input stream (the default value for <tt>$stdin</tt>): The standard input stream (the default value for <tt>$stdin</tt>):
STDIN # => #<IO:<STDIN>> STDIN # => #<IO:<STDIN>>
==== <tt>STDOUT</tt> === <tt>STDOUT</tt>
The standard output stream (the default value for <tt>$stdout</tt>): The standard output stream (the default value for <tt>$stdout</tt>):
STDOUT # => #<IO:<STDOUT>> STDOUT # => #<IO:<STDOUT>>
==== <tt>STDERR</tt> === <tt>STDERR</tt>
The standard error stream (the default value for <tt>$stderr</tt>): The standard error stream (the default value for <tt>$stderr</tt>):
STDERR # => #<IO:<STDERR>> STDERR # => #<IO:<STDERR>>
=== Enviroment == Enviroment
==== ENV === ENV
A hash of the contains current environment variables names and values: A hash of the contains current environment variables names and values:
@ -321,41 +321,41 @@ A hash of the contains current environment variables names and values:
["DISPLAY", ":0"], ["DISPLAY", ":0"],
["GDMSESSION", "ubuntu"]] ["GDMSESSION", "ubuntu"]]
==== ARGF === ARGF
The virtual concatenation of the files given on the command line, or from The virtual concatenation of the files given on the command line, or from
<tt>$stdin</tt> if no files were given, <tt>"-"</tt> is given, or after <tt>$stdin</tt> if no files were given, <tt>"-"</tt> is given, or after
all files have been read. all files have been read.
==== <tt>ARGV</tt> === <tt>ARGV</tt>
An array of the given command-line arguments. An array of the given command-line arguments.
==== <tt>TOPLEVEL_BINDING</tt> === <tt>TOPLEVEL_BINDING</tt>
The Binding of the top level scope: The Binding of the top level scope:
TOPLEVEL_BINDING # => #<Binding:0x00007f58da0da7c0> TOPLEVEL_BINDING # => #<Binding:0x00007f58da0da7c0>
==== <tt>RUBY_VERSION</tt> === <tt>RUBY_VERSION</tt>
The Ruby version: The Ruby version:
RUBY_VERSION # => "3.2.2" RUBY_VERSION # => "3.2.2"
==== <tt>RUBY_RELEASE_DATE</tt> === <tt>RUBY_RELEASE_DATE</tt>
The release date string: The release date string:
RUBY_RELEASE_DATE # => "2023-03-30" RUBY_RELEASE_DATE # => "2023-03-30"
==== <tt>RUBY_PLATFORM</tt> === <tt>RUBY_PLATFORM</tt>
The platform identifier: The platform identifier:
RUBY_PLATFORM # => "x86_64-linux" RUBY_PLATFORM # => "x86_64-linux"
==== <tt>RUBY_PATCHLEVEL</tt> === <tt>RUBY_PATCHLEVEL</tt>
The integer patch level for this Ruby: The integer patch level for this Ruby:
@ -363,41 +363,41 @@ The integer patch level for this Ruby:
For a development build the patch level will be -1. For a development build the patch level will be -1.
==== <tt>RUBY_REVISION</tt> === <tt>RUBY_REVISION</tt>
The git commit hash for this Ruby: The git commit hash for this Ruby:
RUBY_REVISION # => "e51014f9c05aa65cbf203442d37fef7c12390015" RUBY_REVISION # => "e51014f9c05aa65cbf203442d37fef7c12390015"
==== <tt>RUBY_COPYRIGHT</tt> === <tt>RUBY_COPYRIGHT</tt>
The copyright string: The copyright string:
RUBY_COPYRIGHT RUBY_COPYRIGHT
# => "ruby - Copyright (C) 1993-2023 Yukihiro Matsumoto" # => "ruby - Copyright (C) 1993-2023 Yukihiro Matsumoto"
==== <tt>RUBY_ENGINE</tt> === <tt>RUBY_ENGINE</tt>
The name of the Ruby implementation: The name of the Ruby implementation:
RUBY_ENGINE # => "ruby" RUBY_ENGINE # => "ruby"
==== <tt>RUBY_ENGINE_VERSION</tt> === <tt>RUBY_ENGINE_VERSION</tt>
The version of the Ruby implementation: The version of the Ruby implementation:
RUBY_ENGINE_VERSION # => "3.2.2" RUBY_ENGINE_VERSION # => "3.2.2"
==== <tt>RUBY_DESCRIPTION</tt> === <tt>RUBY_DESCRIPTION</tt>
The description of the Ruby implementation: The description of the Ruby implementation:
RUBY_DESCRIPTION RUBY_DESCRIPTION
# => "ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-linux]" # => "ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-linux]"
=== Embedded \Data == Embedded \Data
==== <tt>DATA</tt> === <tt>DATA</tt>
Defined if and only if the program has this line: Defined if and only if the program has this line:

View File

@ -1,4 +1,4 @@
== Implicit Conversions = Implicit Conversions
Some Ruby methods accept one or more objects Some Ruby methods accept one or more objects
that can be either: that can be either:
@ -15,7 +15,7 @@ a specific conversion method:
* Integer: +to_int+ * Integer: +to_int+
* String: +to_str+ * String: +to_str+
=== Array-Convertible Objects == Array-Convertible Objects
An <i>Array-convertible object</i> is an object that: An <i>Array-convertible object</i> is an object that:
@ -69,7 +69,7 @@ This class is not Array-convertible (method +to_ary+ returns non-Array):
# Raises TypeError (can't convert NotArrayConvertible to Array (NotArrayConvertible#to_ary gives Symbol)) # Raises TypeError (can't convert NotArrayConvertible to Array (NotArrayConvertible#to_ary gives Symbol))
a.replace(NotArrayConvertible.new) a.replace(NotArrayConvertible.new)
=== Hash-Convertible Objects == Hash-Convertible Objects
A <i>Hash-convertible object</i> is an object that: A <i>Hash-convertible object</i> is an object that:
@ -123,7 +123,7 @@ This class is not Hash-convertible (method +to_hash+ returns non-Hash):
# Raises TypeError (can't convert NotHashConvertible to Hash (ToHashReturnsNonHash#to_hash gives Symbol)) # Raises TypeError (can't convert NotHashConvertible to Hash (ToHashReturnsNonHash#to_hash gives Symbol))
h.merge(NotHashConvertible.new) h.merge(NotHashConvertible.new)
=== Integer-Convertible Objects == Integer-Convertible Objects
An <i>Integer-convertible object</i> is an object that: An <i>Integer-convertible object</i> is an object that:
@ -171,7 +171,7 @@ This class is not Integer-convertible (method +to_int+ returns non-Integer):
# Raises TypeError (can't convert NotIntegerConvertible to Integer (NotIntegerConvertible#to_int gives Symbol)) # Raises TypeError (can't convert NotIntegerConvertible to Integer (NotIntegerConvertible#to_int gives Symbol))
Array.new(NotIntegerConvertible.new) Array.new(NotIntegerConvertible.new)
=== String-Convertible Objects == String-Convertible Objects
A <i>String-convertible object</i> is an object that: A <i>String-convertible object</i> is an object that:
* Has instance method +to_str+. * Has instance method +to_str+.

View File

@ -1,4 +1,4 @@
== Keywords = Keywords
The following keywords are used by Ruby. The following keywords are used by Ruby.

View File

@ -1,4 +1,4 @@
== Packed \Data = Packed \Data
Certain Ruby core methods deal with packing and unpacking data: Certain Ruby core methods deal with packing and unpacking data:
@ -64,7 +64,7 @@ If elements don't fit the provided directive, only least significant bits are en
[257].pack("C").unpack("C") # => [1] [257].pack("C").unpack("C") # => [1]
=== Packing \Method == Packing \Method
\Method Array#pack accepts optional keyword argument \Method Array#pack accepts optional keyword argument
+buffer+ that specifies the target string (instead of a new string): +buffer+ that specifies the target string (instead of a new string):
@ -76,7 +76,7 @@ The method can accept a block:
# Packed string is passed to the block. # Packed string is passed to the block.
[65, 66].pack('C*') {|s| p s } # => "AB" [65, 66].pack('C*') {|s| p s } # => "AB"
=== Unpacking Methods == Unpacking Methods
Methods String#unpack and String#unpack1 each accept Methods String#unpack and String#unpack1 each accept
an optional keyword argument +offset+ that specifies an offset an optional keyword argument +offset+ that specifies an offset
@ -95,12 +95,12 @@ Both methods can accept a block:
# The single unpacked object is passed to the block. # The single unpacked object is passed to the block.
'AB'.unpack1('C*') {|ele| p ele } # => 65 'AB'.unpack1('C*') {|ele| p ele } # => 65
=== \Integer Directives == \Integer Directives
Each integer directive specifies the packing or unpacking Each integer directive specifies the packing or unpacking
for one element in the input or output array. for one element in the input or output array.
==== 8-Bit \Integer Directives === 8-Bit \Integer Directives
- <tt>'c'</tt> - 8-bit signed integer - <tt>'c'</tt> - 8-bit signed integer
(like C <tt>signed char</tt>): (like C <tt>signed char</tt>):
@ -116,7 +116,7 @@ for one element in the input or output array.
s = [0, 1, -1].pack('C*') # => "\x00\x01\xFF" s = [0, 1, -1].pack('C*') # => "\x00\x01\xFF"
s.unpack('C*') # => [0, 1, 255] s.unpack('C*') # => [0, 1, 255]
==== 16-Bit \Integer Directives === 16-Bit \Integer Directives
- <tt>'s'</tt> - 16-bit signed integer, native-endian - <tt>'s'</tt> - 16-bit signed integer, native-endian
(like C <tt>int16_t</tt>): (like C <tt>int16_t</tt>):
@ -146,7 +146,7 @@ for one element in the input or output array.
s.unpack('v*') s.unpack('v*')
# => [0, 1, 65535, 32767, 32768, 65535] # => [0, 1, 65535, 32767, 32768, 65535]
==== 32-Bit \Integer Directives === 32-Bit \Integer Directives
- <tt>'l'</tt> - 32-bit signed integer, native-endian - <tt>'l'</tt> - 32-bit signed integer, native-endian
(like C <tt>int32_t</tt>): (like C <tt>int32_t</tt>):
@ -178,7 +178,7 @@ for one element in the input or output array.
s.unpack('v*') s.unpack('v*')
# => [0, 0, 1, 0, 65535, 65535] # => [0, 0, 1, 0, 65535, 65535]
==== 64-Bit \Integer Directives === 64-Bit \Integer Directives
- <tt>'q'</tt> - 64-bit signed integer, native-endian - <tt>'q'</tt> - 64-bit signed integer, native-endian
(like C <tt>int64_t</tt>): (like C <tt>int64_t</tt>):
@ -196,7 +196,7 @@ for one element in the input or output array.
s.unpack('Q*') s.unpack('Q*')
# => [578437695752307201, 17940646550795321087] # => [578437695752307201, 17940646550795321087]
==== Platform-Dependent \Integer Directives === Platform-Dependent \Integer Directives
- <tt>'i'</tt> - Platform-dependent width signed integer, - <tt>'i'</tt> - Platform-dependent width signed integer,
native-endian (like C <tt>int</tt>): native-endian (like C <tt>int</tt>):
@ -230,7 +230,7 @@ for one element in the input or output array.
s.unpack('J*') s.unpack('J*')
# => [67305985, 4244504319] # => [67305985, 4244504319]
==== Other \Integer Directives === Other \Integer Directives
- <tt>'U'</tt> - UTF-8 character: - <tt>'U'</tt> - UTF-8 character:
@ -247,7 +247,7 @@ for one element in the input or output array.
s.unpack('w*') s.unpack('w*')
# => [1073741823] # => [1073741823]
==== Modifiers for \Integer Directives === Modifiers for \Integer Directives
For the following directives, <tt>'!'</tt> or <tt>'_'</tt> modifiers may be For the following directives, <tt>'!'</tt> or <tt>'_'</tt> modifiers may be
suffixed as underlying platforms native size. suffixed as underlying platforms native size.
@ -265,12 +265,12 @@ The endian modifiers also may be suffixed in the directives above:
- <tt>'>'</tt> - Big-endian. - <tt>'>'</tt> - Big-endian.
- <tt>'<'</tt> - Little-endian. - <tt>'<'</tt> - Little-endian.
=== \Float Directives == \Float Directives
Each float directive specifies the packing or unpacking Each float directive specifies the packing or unpacking
for one element in the input or output array. for one element in the input or output array.
==== Single-Precision \Float Directives === Single-Precision \Float Directives
- <tt>'F'</tt> or <tt>'f'</tt> - Native format: - <tt>'F'</tt> or <tt>'f'</tt> - Native format:
@ -287,7 +287,7 @@ for one element in the input or output array.
s = [3.0].pack('g') # => "@@\x00\x00" s = [3.0].pack('g') # => "@@\x00\x00"
s.unpack('g') # => [3.0] s.unpack('g') # => [3.0]
==== Double-Precision \Float Directives === Double-Precision \Float Directives
- <tt>'D'</tt> or <tt>'d'</tt> - Native format: - <tt>'D'</tt> or <tt>'d'</tt> - Native format:
@ -314,12 +314,12 @@ A float directive may be infinity or not-a-number:
[nan].pack('f') # => "\x00\x00\xC0\x7F" [nan].pack('f') # => "\x00\x00\xC0\x7F"
"\x00\x00\xC0\x7F".unpack('f') # => [NaN] "\x00\x00\xC0\x7F".unpack('f') # => [NaN]
=== \String Directives == \String Directives
Each string directive specifies the packing or unpacking Each string directive specifies the packing or unpacking
for one byte in the input or output string. for one byte in the input or output string.
==== Binary \String Directives === Binary \String Directives
- <tt>'A'</tt> - Arbitrary binary string (space padded; count is width); - <tt>'A'</tt> - Arbitrary binary string (space padded; count is width);
+nil+ is treated as the empty string: +nil+ is treated as the empty string:
@ -377,7 +377,7 @@ for one byte in the input or output string.
"foo".unpack('Z*') # => ["foo"] "foo".unpack('Z*') # => ["foo"]
"foo\0bar".unpack('Z*') # => ["foo"] # Does not read past "\0". "foo\0bar".unpack('Z*') # => ["foo"] # Does not read past "\0".
==== Bit \String Directives === Bit \String Directives
- <tt>'B'</tt> - Bit string (high byte first): - <tt>'B'</tt> - Bit string (high byte first):
@ -421,7 +421,7 @@ for one byte in the input or output string.
"\x01".unpack("b2") # => ["10"] "\x01".unpack("b2") # => ["10"]
"\x01".unpack("b3") # => ["100"] "\x01".unpack("b3") # => ["100"]
==== Hex \String Directives === Hex \String Directives
- <tt>'H'</tt> - Hex string (high nibble first): - <tt>'H'</tt> - Hex string (high nibble first):
@ -467,7 +467,7 @@ for one byte in the input or output string.
"\x01\xfe".unpack('h4') # => ["10ef"] "\x01\xfe".unpack('h4') # => ["10ef"]
"\x01\xfe".unpack('h5') # => ["10ef"] "\x01\xfe".unpack('h5') # => ["10ef"]
==== Pointer \String Directives === Pointer \String Directives
- <tt>'P'</tt> - Pointer to a structure (fixed-length string): - <tt>'P'</tt> - Pointer to a structure (fixed-length string):
@ -485,7 +485,7 @@ for one byte in the input or output string.
("\0" * 8).unpack("p") # => [nil] ("\0" * 8).unpack("p") # => [nil]
[nil].pack("p") # => "\x00\x00\x00\x00\x00\x00\x00\x00" [nil].pack("p") # => "\x00\x00\x00\x00\x00\x00\x00\x00"
==== Other \String Directives === Other \String Directives
- <tt>'M'</tt> - Quoted printable, MIME encoding; - <tt>'M'</tt> - Quoted printable, MIME encoding;
text mode, but input must use LF and output LF; text mode, but input must use LF and output LF;
@ -559,7 +559,7 @@ for one byte in the input or output string.
[0x40000000].pack("U") # => "\xFD\x80\x80\x80\x80\x80" [0x40000000].pack("U") # => "\xFD\x80\x80\x80\x80\x80"
[0x7fffffff].pack("U") # => "\xFD\xBF\xBF\xBF\xBF\xBF" [0x7fffffff].pack("U") # => "\xFD\xBF\xBF\xBF\xBF\xBF"
=== Offset Directives == Offset Directives
- <tt>'@'</tt> - Begin packing at the given byte offset; - <tt>'@'</tt> - Begin packing at the given byte offset;
for packing, null fill if necessary: for packing, null fill if necessary:
@ -577,7 +577,7 @@ for one byte in the input or output string.
[0, 1, 2].pack("CCX2C") # => "\x02" [0, 1, 2].pack("CCX2C") # => "\x02"
"\x00\x02".unpack("CCXC") # => [0, 2, 2] "\x00\x02".unpack("CCXC") # => [0, 2, 2]
=== Null Byte Direcive == Null Byte Direcive
- <tt>'x'</tt> - Null byte: - <tt>'x'</tt> - Null byte:

View File

@ -1,4 +1,4 @@
== Formats for Dates and Times = Formats for Dates and Times
Several Ruby time-related classes have instance method +strftime+, Several Ruby time-related classes have instance method +strftime+,
which returns a formatted string representing all or part of a date or time: which returns a formatted string representing all or part of a date or time:
@ -32,9 +32,9 @@ It consists of:
Except for the leading percent character, Except for the leading percent character,
the only required part is the conversion specifier, so we begin with that. the only required part is the conversion specifier, so we begin with that.
=== Conversion Specifiers == Conversion Specifiers
==== \Date (Year, Month, Day) === \Date (Year, Month, Day)
- <tt>%Y</tt> - Year including century, zero-padded: - <tt>%Y</tt> - Year including century, zero-padded:
@ -87,7 +87,7 @@ the only required part is the conversion specifier, so we begin with that.
Time.new(2002, 1, 1).strftime('%j') # => "001" Time.new(2002, 1, 1).strftime('%j') # => "001"
Time.new(2002, 12, 31).strftime('%j') # => "365" Time.new(2002, 12, 31).strftime('%j') # => "365"
==== \Time (Hour, Minute, Second, Subsecond) === \Time (Hour, Minute, Second, Subsecond)
- <tt>%H</tt> - Hour of the day, in range (0..23), zero-padded: - <tt>%H</tt> - Hour of the day, in range (0..23), zero-padded:
@ -152,7 +152,7 @@ the only required part is the conversion specifier, so we begin with that.
Time.now.strftime('%s') # => "1656505136" Time.now.strftime('%s') # => "1656505136"
==== Timezone === Timezone
- <tt>%z</tt> - Timezone as hour and minute offset from UTC: - <tt>%z</tt> - Timezone as hour and minute offset from UTC:
@ -162,7 +162,7 @@ the only required part is the conversion specifier, so we begin with that.
Time.now.strftime('%Z') # => "Central Daylight Time" Time.now.strftime('%Z') # => "Central Daylight Time"
==== Weekday === Weekday
- <tt>%A</tt> - Full weekday name: - <tt>%A</tt> - Full weekday name:
@ -184,7 +184,7 @@ the only required part is the conversion specifier, so we begin with that.
t.strftime('%a') # => "Sun" t.strftime('%a') # => "Sun"
t.strftime('%w') # => "0" t.strftime('%w') # => "0"
==== Week Number === Week Number
- <tt>%U</tt> - Week number of the year, in range (0..53), zero-padded, - <tt>%U</tt> - Week number of the year, in range (0..53), zero-padded,
where each week begins on a Sunday: where each week begins on a Sunday:
@ -200,7 +200,7 @@ the only required part is the conversion specifier, so we begin with that.
t.strftime('%a') # => "Sun" t.strftime('%a') # => "Sun"
t.strftime('%W') # => "25" t.strftime('%W') # => "25"
==== Week Dates === Week Dates
See {ISO 8601 week dates}[https://en.wikipedia.org/wiki/ISO_8601#Week_dates]. See {ISO 8601 week dates}[https://en.wikipedia.org/wiki/ISO_8601#Week_dates].
@ -223,7 +223,7 @@ See {ISO 8601 week dates}[https://en.wikipedia.org/wiki/ISO_8601#Week_dates].
t0.strftime('%V') # => "52" t0.strftime('%V') # => "52"
t1.strftime('%V') # => "01" t1.strftime('%V') # => "01"
==== Literals === Literals
- <tt>%n</tt> - Newline character "\n": - <tt>%n</tt> - Newline character "\n":
@ -237,7 +237,7 @@ See {ISO 8601 week dates}[https://en.wikipedia.org/wiki/ISO_8601#Week_dates].
Time.now.strftime('%%') # => "%" Time.now.strftime('%%') # => "%"
==== Shorthand Conversion Specifiers === Shorthand Conversion Specifiers
Each shorthand specifier here is shown with its corresponding Each shorthand specifier here is shown with its corresponding
longhand specifier. longhand specifier.
@ -294,14 +294,14 @@ longhand specifier.
DateTime.now.strftime('%a %b %e %H:%M:%S %Z %Y') DateTime.now.strftime('%a %b %e %H:%M:%S %Z %Y')
# => "Wed Jun 29 08:32:18 -05:00 2022" # => "Wed Jun 29 08:32:18 -05:00 2022"
=== Flags == Flags
Flags may affect certain formatting specifications. Flags may affect certain formatting specifications.
Multiple flags may be given with a single conversion specified; Multiple flags may be given with a single conversion specified;
order does not matter. order does not matter.
==== Padding Flags === Padding Flags
- <tt>0</tt> - Pad with zeroes: - <tt>0</tt> - Pad with zeroes:
@ -315,7 +315,7 @@ order does not matter.
Time.new(10).strftime('%-Y') # => "10" Time.new(10).strftime('%-Y') # => "10"
==== Casing Flags === Casing Flags
- <tt>^</tt> - Upcase result: - <tt>^</tt> - Upcase result:
@ -328,7 +328,7 @@ order does not matter.
Time.now.strftime('%^p') # => "AM" Time.now.strftime('%^p') # => "AM"
Time.now.strftime('%#p') # => "am" Time.now.strftime('%#p') # => "am"
==== Timezone Flags === Timezone Flags
- <tt>:</tt> - Put timezone as colon-separated hours and minutes: - <tt>:</tt> - Put timezone as colon-separated hours and minutes:
@ -338,7 +338,7 @@ order does not matter.
Time.now.strftime('%::z') # => "-05:00:00" Time.now.strftime('%::z') # => "-05:00:00"
=== Width Specifiers == Width Specifiers
The integer width specifier gives a minimum width for the returned string: The integer width specifier gives a minimum width for the returned string:
@ -348,12 +348,12 @@ The integer width specifier gives a minimum width for the returned string:
Time.new(2002, 12).strftime('%10B') # => " December" Time.new(2002, 12).strftime('%10B') # => " December"
Time.new(2002, 12).strftime('%3B') # => "December" # Ignored if too small. Time.new(2002, 12).strftime('%3B') # => "December" # Ignored if too small.
== Specialized Format Strings = Specialized Format Strings
Here are a few specialized format strings, Here are a few specialized format strings,
each based on an external standard. each based on an external standard.
=== HTTP Format == HTTP Format
The HTTP date format is based on The HTTP date format is based on
{RFC 2616}[https://datatracker.ietf.org/doc/html/rfc2616], {RFC 2616}[https://datatracker.ietf.org/doc/html/rfc2616],
@ -368,7 +368,7 @@ and treats dates in the format <tt>'%a, %d %b %Y %T GMT'</tt>:
Date._httpdate(httpdate) Date._httpdate(httpdate)
# => {:wday=>6, :mday=>3, :mon=>2, :year=>2001, :hour=>0, :min=>0, :sec=>0, :zone=>"GMT", :offset=>0} # => {:wday=>6, :mday=>3, :mon=>2, :year=>2001, :hour=>0, :min=>0, :sec=>0, :zone=>"GMT", :offset=>0}
=== RFC 3339 Format == RFC 3339 Format
The RFC 3339 date format is based on The RFC 3339 date format is based on
{RFC 3339}[https://datatracker.ietf.org/doc/html/rfc3339]: {RFC 3339}[https://datatracker.ietf.org/doc/html/rfc3339]:
@ -382,7 +382,7 @@ The RFC 3339 date format is based on
Date._rfc3339(rfc3339) Date._rfc3339(rfc3339)
# => {:year=>2001, :mon=>2, :mday=>3, :hour=>0, :min=>0, :sec=>0, :zone=>"+00:00", :offset=>0} # => {:year=>2001, :mon=>2, :mday=>3, :hour=>0, :min=>0, :sec=>0, :zone=>"+00:00", :offset=>0}
=== RFC 2822 Format == RFC 2822 Format
The RFC 2822 date format is based on The RFC 2822 date format is based on
{RFC 2822}[https://datatracker.ietf.org/doc/html/rfc2822], {RFC 2822}[https://datatracker.ietf.org/doc/html/rfc2822],
@ -397,7 +397,7 @@ and treats dates in the format <tt>'%a, %-d %b %Y %T %z'</tt>]:
Date._rfc2822(rfc2822) Date._rfc2822(rfc2822)
# => {:wday=>6, :mday=>3, :mon=>2, :year=>2001, :hour=>0, :min=>0, :sec=>0, :zone=>"+0000", :offset=>0} # => {:wday=>6, :mday=>3, :mon=>2, :year=>2001, :hour=>0, :min=>0, :sec=>0, :zone=>"+0000", :offset=>0}
=== JIS X 0301 Format == JIS X 0301 Format
The JIS X 0301 format includes the The JIS X 0301 format includes the
{Japanese era name}[https://en.wikipedia.org/wiki/Japanese_era_name], {Japanese era name}[https://en.wikipedia.org/wiki/Japanese_era_name],
@ -412,7 +412,7 @@ with the first letter of the romanized era name prefixed:
# Return hash parsed from 0301-formatted string. # Return hash parsed from 0301-formatted string.
Date._jisx0301(jisx0301) # => {:year=>2001, :mon=>2, :mday=>3} Date._jisx0301(jisx0301) # => {:year=>2001, :mon=>2, :mday=>3}
=== ISO 8601 Format Specifications == ISO 8601 Format Specifications
This section shows format specifications that are compatible with This section shows format specifications that are compatible with
{ISO 8601}[https://en.wikipedia.org/wiki/ISO_8601]. {ISO 8601}[https://en.wikipedia.org/wiki/ISO_8601].
@ -422,7 +422,7 @@ Examples in this section assume:
t = Time.now # => 2022-06-29 16:49:25.465246 -0500 t = Time.now # => 2022-06-29 16:49:25.465246 -0500
==== Dates === Dates
See {ISO 8601 dates}[https://en.wikipedia.org/wiki/ISO_8601#Dates]. See {ISO 8601 dates}[https://en.wikipedia.org/wiki/ISO_8601#Dates].
@ -473,7 +473,7 @@ See {ISO 8601 dates}[https://en.wikipedia.org/wiki/ISO_8601#Dates].
t.strftime('%Y-%j') # => "2022-180" t.strftime('%Y-%j') # => "2022-180"
==== Times === Times
See {ISO 8601 times}[https://en.wikipedia.org/wiki/ISO_8601#Times]. See {ISO 8601 times}[https://en.wikipedia.org/wiki/ISO_8601#Times].
@ -514,7 +514,7 @@ See {ISO 8601 times}[https://en.wikipedia.org/wiki/ISO_8601#Times].
- {Coordinated Universal Time (UTC)}[https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)]. - {Coordinated Universal Time (UTC)}[https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)].
- {Time offsets from UTC}[https://en.wikipedia.org/wiki/ISO_8601#Time_offsets_from_UTC]. - {Time offsets from UTC}[https://en.wikipedia.org/wiki/ISO_8601#Time_offsets_from_UTC].
==== Combined \Date and \Time === Combined \Date and \Time
See {ISO 8601 Combined date and time representations}[https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations]. See {ISO 8601 Combined date and time representations}[https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations].

View File

@ -1,6 +1,6 @@
== Timezones = Timezones
=== Timezone Specifiers == Timezone Specifiers
Certain \Time methods accept arguments that specify timezones: Certain \Time methods accept arguments that specify timezones:
@ -18,7 +18,7 @@ The value given with any of these must be one of the following
- {Integer offset}[rdoc-ref:timezones.rdoc@Integer+Offsets]. - {Integer offset}[rdoc-ref:timezones.rdoc@Integer+Offsets].
- {Timezone object}[rdoc-ref:timezones.rdoc@Timezone+Objects]. - {Timezone object}[rdoc-ref:timezones.rdoc@Timezone+Objects].
==== Hours/Minutes Offsets === Hours/Minutes Offsets
The zone value may be a string offset from UTC The zone value may be a string offset from UTC
in the form <tt>'+HH:MM'</tt> or <tt>'-HH:MM'</tt>, in the form <tt>'+HH:MM'</tt> or <tt>'-HH:MM'</tt>,
@ -33,7 +33,7 @@ Examples:
Time.at(t, in: '-23:59') # => 1999-12-31 20:16:01 -2359 Time.at(t, in: '-23:59') # => 1999-12-31 20:16:01 -2359
Time.at(t, in: '+23:59') # => 2000-01-02 20:14:01 +2359 Time.at(t, in: '+23:59') # => 2000-01-02 20:14:01 +2359
==== Single-Letter Offsets === Single-Letter Offsets
The zone value may be a letter in the range <tt>'A'..'I'</tt> The zone value may be a letter in the range <tt>'A'..'I'</tt>
or <tt>'K'..'Z'</tt>; or <tt>'K'..'Z'</tt>;
@ -46,7 +46,7 @@ see {List of military time zones}[https://en.wikipedia.org/wiki/List_of_military
Time.at(t, in: 'Y') # => 2000-01-01 08:15:01 -1200 Time.at(t, in: 'Y') # => 2000-01-01 08:15:01 -1200
Time.at(t, in: 'Z') # => 2000-01-01 20:15:01 UTC Time.at(t, in: 'Z') # => 2000-01-01 20:15:01 UTC
==== \Integer Offsets === \Integer Offsets
The zone value may be an integer number of seconds The zone value may be an integer number of seconds
in the range <tt>-86399..86399</tt>: in the range <tt>-86399..86399</tt>:
@ -55,7 +55,7 @@ in the range <tt>-86399..86399</tt>:
Time.at(t, in: -86399) # => 1999-12-31 20:15:02 -235959 Time.at(t, in: -86399) # => 1999-12-31 20:15:02 -235959
Time.at(t, in: 86399) # => 2000-01-02 20:15:00 +235959 Time.at(t, in: 86399) # => 2000-01-02 20:15:00 +235959
==== Timezone Objects === Timezone Objects
The zone value may be an object responding to certain timezone methods. The zone value may be an object responding to certain timezone methods.