mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	[DOC] Use RDoc inclusions in string.c (#5683)
As @peterzhu2118 and @duerst have pointed out, putting string method's RDoc into doc/ (which allows non-ASCII in examples) makes the "click to toggle source" feature not work for that method.
This PR moves the primary method doc back into string.c, then includes RDoc from doc/string/*.rdoc, and also removes doc/string.rdoc.
The affected methods are:
    ::new
    #bytes
    #each_byte
    #each_line
    #split
The call-seq is in string.c because it works there; it did not work when the call-seq is in doc/string/*.rdoc.
This PR also updates the relevant guidance in doc/documentation_guide.rdoc.
			
			
This commit is contained in:
		
							parent
							
								
									1fd1f7bbfc
								
							
						
					
					
						commit
						c129b6119d
					
				
				
				Notes:
				
					git
				
				2022-03-22 04:58:22 +09:00 
				
			
			Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>
					 8 changed files with 261 additions and 274 deletions
				
			
		|  | @ -60,34 +60,25 @@ involving new files <tt>doc/*.rdoc</tt>: | |||
|     # Documentation for module Bar goes here. | ||||
|     module Bar; end | ||||
| 
 | ||||
| - For an instance method Baz#bat (defined in file <tt>baz.c</tt>), | ||||
|   create file <tt>doc/baz.rdoc</tt>, declare class +Baz+ | ||||
|   and instance method +bat+, and place the method documentation above | ||||
|   the method declaration: | ||||
| - For a method, things are different. | ||||
|   Documenting a method as above disables the "click to toggle source" feature | ||||
|   in the rendered documentaion. | ||||
| 
 | ||||
|     # :markup: ruby | ||||
|     class Baz | ||||
|       # Documentation for method bat goes here. | ||||
|       # (Don't forget the call-seq.) | ||||
|       def bat; end | ||||
|     end | ||||
|   Therefore it's best to use file inclusion: | ||||
| 
 | ||||
| - For a singleton method Bam.bah (defined in file <tt>bam.c</tt>), | ||||
|   create file <tt>doc/bam.rdoc</tt>, declare class +Bam+ | ||||
|   and singleton method +bah+, and place the method documentation above | ||||
|   the method declaration: | ||||
|   - Retain the call-seq in the C code. | ||||
|   - Use file inclusion (+:include:+) to include text from an .rdoc file. | ||||
| 
 | ||||
|     # :markup: ruby | ||||
|     class Bam | ||||
|       # Documentation for method bah goes here. | ||||
|       # (Don't forget the call-seq.) | ||||
|       def self.bah; end | ||||
|     end | ||||
|   Example: | ||||
| 
 | ||||
|   See these examples: | ||||
| 
 | ||||
|   - https://raw.githubusercontent.com/ruby/ruby/master/doc/string.rdoc | ||||
|   - https://raw.githubusercontent.com/ruby/ruby/master/doc/transcode.rdoc | ||||
|     /* | ||||
|      *  call-seq: | ||||
|      *    each_byte {|byte| ... } -> self | ||||
|      *    each_byte               -> enumerator | ||||
|      * | ||||
|      *  \:include: doc/string/each_byte.rdoc | ||||
|      * | ||||
|      */ | ||||
| 
 | ||||
| === \RDoc | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										245
									
								
								doc/string.rdoc
									
										
									
									
									
								
							
							
						
						
									
										245
									
								
								doc/string.rdoc
									
										
									
									
									
								
							|  | @ -1,245 +0,0 @@ | |||
| # :markup: ruby | ||||
| 
 | ||||
| class String | ||||
|   # call-seq: | ||||
|   #   String.new(string = '') -> new_string | ||||
|   #   String.new(string = '', encoding: encoding) -> new_string | ||||
|   #   String.new(string = '', capacity: size) -> new_string | ||||
|   # | ||||
|   # Returns a new \String that is a copy of +string+. | ||||
|   # | ||||
|   # With no arguments, returns the empty string with the Encoding <tt>ASCII-8BIT</tt>: | ||||
|   #   s = String.new | ||||
|   #   s # => "" | ||||
|   #   s.encoding # => #<Encoding:ASCII-8BIT> | ||||
|   # | ||||
|   # With the single \String argument +string+, returns a copy of +string+ | ||||
|   # with the same encoding as +string+: | ||||
|   #   s = String.new('Que veut dire ça?') | ||||
|   #   s # => "Que veut dire ça?" | ||||
|   #   s.encoding # => #<Encoding:UTF-8> | ||||
|   # | ||||
|   # Literal strings like <tt>""</tt> or here-documents always use | ||||
|   # Encoding@Script+encoding, unlike String.new. | ||||
|   # | ||||
|   # With keyword +encoding+, returns a copy of +str+ | ||||
|   # with the specified encoding: | ||||
|   #   s = String.new(encoding: 'ASCII') | ||||
|   #   s.encoding # => #<Encoding:US-ASCII> | ||||
|   #   s = String.new('foo', encoding: 'ASCII') | ||||
|   #   s.encoding # => #<Encoding:US-ASCII> | ||||
|   # | ||||
|   # Note that these are equivalent: | ||||
|   #   s0 = String.new('foo', encoding: 'ASCII') | ||||
|   #   s1 = 'foo'.force_encoding('ASCII') | ||||
|   #   s0.encoding == s1.encoding # => true | ||||
|   # | ||||
|   # With keyword +capacity+, returns a copy of +str+; | ||||
|   # the given +capacity+ may set the size of the internal buffer, | ||||
|   # which may affect performance: | ||||
|   #   String.new(capacity: 1) # => "" | ||||
|   #   String.new(capacity: 4096) # => "" | ||||
|   # | ||||
|   # The +string+, +encoding+, and +capacity+ arguments may all be used together: | ||||
|   # | ||||
|   #   String.new('hello', encoding: 'UTF-8', capacity: 25) | ||||
|   # | ||||
|   def initialize(str = '', encoding: nil, capacity: nil) | ||||
|     Primitive.rb_str_init(str, encoding, capacity) | ||||
|   end | ||||
| 
 | ||||
|   #  call-seq: | ||||
|   #    bytes -> array_of_bytes | ||||
|   # | ||||
|   #  Returns an array of the bytes in +self+: | ||||
|   # | ||||
|   #    'hello'.bytes # => [104, 101, 108, 108, 111] | ||||
|   #    'тест'.bytes  # => [209, 130, 208, 181, 209, 129, 209, 130] | ||||
|   #    'こんにちは'.bytes | ||||
|   #    # => [227, 129, 147, 227, 130, 147, 227, 129, 171, 227, 129, 161, 227, 129, 175] | ||||
|   # | ||||
|   def bytes; end | ||||
| 
 | ||||
|   #  call-seq: | ||||
|   #    each_byte {|byte| ... } -> self | ||||
|   #    each_byte               -> enumerator | ||||
|   # | ||||
|   #  Calls the given block with each successive byte from +self+; | ||||
|   #  returns +self+: | ||||
|   # | ||||
|   #    'hello'.each_byte {|byte| print byte, ' ' } | ||||
|   #    print "\n" | ||||
|   #    'тест'.each_byte {|byte| print byte, ' ' } | ||||
|   #    print "\n" | ||||
|   #    'こんにちは'.each_byte {|byte| print byte, ' ' } | ||||
|   #    print "\n" | ||||
|   # | ||||
|   #  Output: | ||||
|   # | ||||
|   #    104 101 108 108 111 | ||||
|   #    209 130 208 181 209 129 209 130 | ||||
|   #    227 129 147 227 130 147 227 129 171 227 129 161 227 129 175 | ||||
|   # | ||||
|   #  Returns an enumerator if no block is given. | ||||
|   def each_byte; end | ||||
| 
 | ||||
| 
 | ||||
|   #  call-seq: | ||||
|   #    each_line(line_sep = $/, chomp: false) {|substring| ... } -> self | ||||
|   #    each_line(line_sep = $/, chomp: false)                    -> enumerator | ||||
|   # | ||||
|   #  With a block given, forms the substrings ("lines") | ||||
|   #  that are the result of splitting +self+ | ||||
|   #  at each occurrence of the given line separator +line_sep+; | ||||
|   #  passes each line to the block; | ||||
|   #  returns +self+: | ||||
|   # | ||||
|   #    s = <<~EOT | ||||
|   #    This is the first line. | ||||
|   #    This is line two. | ||||
|   # | ||||
|   #    This is line four. | ||||
|   #    This is line five. | ||||
|   #    EOT | ||||
|   # | ||||
|   #    s.each_line {|line| p line } | ||||
|   # | ||||
|   #  Output: | ||||
|   # | ||||
|   #    "This is the first line.\n" | ||||
|   #    "This is line two.\n" | ||||
|   #    "\n" | ||||
|   #    "This is line four.\n" | ||||
|   #    "This is line five.\n" | ||||
|   # | ||||
|   #  With a different +line_sep+: | ||||
|   # | ||||
|   #    s.each_line(' is ') {|line| p line } | ||||
|   # | ||||
|   #  Output: | ||||
|   # | ||||
|   #    "This is " | ||||
|   #    "the first line.\nThis is " | ||||
|   #    "line two.\n\nThis is " | ||||
|   #    "line four.\nThis is " | ||||
|   #    "line five.\n" | ||||
|   # | ||||
|   #  With +chomp+ as +true+, removes the trailing +line_sep+ from each line: | ||||
|   # | ||||
|   #    s.each_line(chomp: true) {|line| p line } | ||||
|   # | ||||
|   #  Output: | ||||
|   # | ||||
|   #    "This is the first line." | ||||
|   #    "This is line two." | ||||
|   #    "" | ||||
|   #    "This is line four." | ||||
|   #    "This is line five." | ||||
|   # | ||||
|   #  With an empty string as +line_sep+, | ||||
|   #  forms and passes "paragraphs" by splitting at each occurrence | ||||
|   #  of two or more newlines: | ||||
|   # | ||||
|   #    s.each_line('') {|line| p line } | ||||
|   # | ||||
|   #  Output: | ||||
|   # | ||||
|   #    "This is the first line.\nThis is line two.\n\n" | ||||
|   #    "This is line four.\nThis is line five.\n" | ||||
|   # | ||||
|   #  With no block given, returns an enumerator. | ||||
|   # | ||||
|   def each_line; end | ||||
| 
 | ||||
|   #  call-seq: | ||||
|   #    split(field_sep = $;, limit = nil) -> array | ||||
|   #    split(field_sep = $;, limit = nil) {|substring| ... } -> self | ||||
|   # | ||||
|   #  Returns an array of substrings of +self+ | ||||
|   #  that are the result of splitting +self+ | ||||
|   #  at each occurrence of the given field separator +field_sep+. | ||||
|   # | ||||
|   #  When +field_sep+ is <tt>$;</tt>: | ||||
|   # | ||||
|   #  - If <tt>$;</tt> is +nil+ (its default value), | ||||
|   #    the split occurs just as if +field_sep+ were given as a space character | ||||
|   #    (see below). | ||||
|   # | ||||
|   #  - If <tt>$;</tt> is a string, | ||||
|   #    the split ocurs just as if +field_sep+ were given as that string | ||||
|   #    (see below). | ||||
|   # | ||||
|   #  When +field_sep+ is <tt>' '</tt> and +limit+ is +nil+, | ||||
|   #  the split occurs at each sequence of whitespace: | ||||
|   # | ||||
|   #    'abc def ghi'.split(' ')          # => ["abc", "def", "ghi"] | ||||
|   #    "abc \n\tdef\t\n  ghi".split(' ') # => ["abc", "def", "ghi"] | ||||
|   #    'abc  def   ghi'.split(' ')       # => ["abc", "def", "ghi"] | ||||
|   #    ''.split(' ')                     # => [] | ||||
|   # | ||||
|   #  When +field_sep+ is a string different from <tt>' '</tt> | ||||
|   #  and +limit+ is +nil+, | ||||
|   #  the split occurs at each occurrence of +field_sep+; | ||||
|   #  trailing empty substrings are not returned: | ||||
|   # | ||||
|   #    'abracadabra'.split('ab')   # => ["", "racad", "ra"] | ||||
|   #    'aaabcdaaa'.split('a')      # => ["", "", "", "bcd"] | ||||
|   #    ''.split('a')               # => [] | ||||
|   #    '3.14159'.split('1')        # => ["3.", "4", "59"] | ||||
|   #    '!@#$%^$&*($)_+'.split('$') # => ["!@#", "%^", "&*(", ")_+"] | ||||
|   #    'тест'.split('т')           # => ["", "ес"] | ||||
|   #    'こんにちは'.split('に')      # => ["こん", "ちは"] | ||||
|   # | ||||
|   #  When +field_sep+ is a Regexp and +limit+ is +nil+, | ||||
|   #  the split occurs at each occurrence of a match; | ||||
|   #  trailing empty substrings are not returned: | ||||
|   # | ||||
|   #    'abracadabra'.split(/ab/) # => ["", "racad", "ra"] | ||||
|   #    'aaabcdaaa'.split(/a/)    # => ["", "", "", "bcd"] | ||||
|   #    'aaabcdaaa'.split(//)     # => ["a", "a", "a", "b", "c", "d", "a", "a", "a"] | ||||
|   #    '1 + 1 == 2'.split(/\W+/) # => ["1", "1", "2"] | ||||
|   # | ||||
|   #  If the \Regexp contains groups, their matches are also included | ||||
|   #  in the returned array: | ||||
|   # | ||||
|   #    '1:2:3'.split(/(:)()()/, 2) # => ["1", ":", "", "", "2:3"] | ||||
|   # | ||||
|   #  As seen above, if +limit+ is +nil+, | ||||
|   #  trailing empty substrings are not returned; | ||||
|   #  the same is true if +limit+ is zero: | ||||
|   # | ||||
|   #    'aaabcdaaa'.split('a')    # => ["", "", "", "bcd"] | ||||
|   #    'aaabcdaaa'.split('a', 0) # => ["", "", "", "bcd"] | ||||
|   # | ||||
|   #  If +limit+ is positive integer +n+, no more than <tt>n - 1-</tt> | ||||
|   #  splits occur, so that at most +n+ substrings are returned, | ||||
|   #  and trailing empty substrings are included: | ||||
|   # | ||||
|   #    'aaabcdaaa'.split('a', 1) # => ["aaabcdaaa"] | ||||
|   #    'aaabcdaaa'.split('a', 2) # => ["", "aabcdaaa"] | ||||
|   #    'aaabcdaaa'.split('a', 5) # => ["", "", "", "bcd", "aa"] | ||||
|   #    'aaabcdaaa'.split('a', 7) # => ["", "", "", "bcd", "", "", ""] | ||||
|   #    'aaabcdaaa'.split('a', 8) # => ["", "", "", "bcd", "", "", ""] | ||||
|   # | ||||
|   #  Note that if +field_sep+ is a \Regexp containing groups, | ||||
|   #  their matches are in the returned array, but do not count toward the limit. | ||||
|   # | ||||
|   #  If +limit+ is negative, it behaves the same as if +limit+ was +nil+, | ||||
|   #  meaning that there is no limit, | ||||
|   #  and trailing empty substrings are included: | ||||
|   # | ||||
|   #    'aaabcdaaa'.split('a', -1) # => ["", "", "", "bcd", "", "", ""] | ||||
|   # | ||||
|   #  If a block is given, it is called with each substring: | ||||
|   # | ||||
|   #    'abc def ghi'.split(' ') {|substring| p substring } | ||||
|   # | ||||
|   #  Output: | ||||
|   # | ||||
|   #    "abc" | ||||
|   #    "def" | ||||
|   #    "ghi" | ||||
|   # | ||||
|   def split; end | ||||
| 
 | ||||
| end | ||||
							
								
								
									
										6
									
								
								doc/string/bytes.rdoc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								doc/string/bytes.rdoc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| Returns an array of the bytes in +self+: | ||||
| 
 | ||||
|   'hello'.bytes # => [104, 101, 108, 108, 111] | ||||
|   'тест'.bytes  # => [209, 130, 208, 181, 209, 129, 209, 130] | ||||
|   'こんにちは'.bytes | ||||
|   # => [227, 129, 147, 227, 130, 147, 227, 129, 171, 227, 129, 161, 227, 129, 175] | ||||
							
								
								
									
										17
									
								
								doc/string/each_byte.rdoc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								doc/string/each_byte.rdoc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,17 @@ | |||
| Calls the given block with each successive byte from +self+; | ||||
| returns +self+: | ||||
| 
 | ||||
|   'hello'.each_byte {|byte| print byte, ' ' } | ||||
|   print "\n" | ||||
|   'тест'.each_byte {|byte| print byte, ' ' } | ||||
|   print "\n" | ||||
|   'こんにちは'.each_byte {|byte| print byte, ' ' } | ||||
|   print "\n" | ||||
| 
 | ||||
| Output: | ||||
| 
 | ||||
|   104 101 108 108 111 | ||||
|   209 130 208 181 209 129 209 130 | ||||
|   227 129 147 227 130 147 227 129 171 227 129 161 227 129 175 | ||||
| 
 | ||||
| Returns an enumerator if no block is given. | ||||
							
								
								
									
										60
									
								
								doc/string/each_line.rdoc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								doc/string/each_line.rdoc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,60 @@ | |||
| With a block given, forms the substrings ("lines") | ||||
| that are the result of splitting +self+ | ||||
| at each occurrence of the given line separator +line_sep+; | ||||
| passes each line to the block; | ||||
| returns +self+: | ||||
| 
 | ||||
|   s = <<~EOT | ||||
|   This is the first line. | ||||
|   This is line two. | ||||
| 
 | ||||
|   This is line four. | ||||
|   This is line five. | ||||
|   EOT | ||||
| 
 | ||||
|   s.each_line {|line| p line } | ||||
| 
 | ||||
| Output: | ||||
| 
 | ||||
|   "This is the first line.\n" | ||||
|   "This is line two.\n" | ||||
|   "\n" | ||||
|   "This is line four.\n" | ||||
|   "This is line five.\n" | ||||
| 
 | ||||
| With a different +line_sep+: | ||||
| 
 | ||||
|   s.each_line(' is ') {|line| p line } | ||||
| 
 | ||||
| Output: | ||||
| 
 | ||||
|   "This is " | ||||
|   "the first line.\nThis is " | ||||
|   "line two.\n\nThis is " | ||||
|   "line four.\nThis is " | ||||
|   "line five.\n" | ||||
| 
 | ||||
| With +chomp+ as +true+, removes the trailing +line_sep+ from each line: | ||||
| 
 | ||||
|   s.each_line(chomp: true) {|line| p line } | ||||
| 
 | ||||
| Output: | ||||
| 
 | ||||
|   "This is the first line." | ||||
|   "This is line two." | ||||
|   "" | ||||
|   "This is line four." | ||||
|   "This is line five." | ||||
| 
 | ||||
| With an empty string as +line_sep+, | ||||
| forms and passes "paragraphs" by splitting at each occurrence | ||||
| of two or more newlines: | ||||
| 
 | ||||
|   s.each_line('') {|line| p line } | ||||
| 
 | ||||
| Output: | ||||
| 
 | ||||
|   "This is the first line.\nThis is line two.\n\n" | ||||
|   "This is line four.\nThis is line five.\n" | ||||
| 
 | ||||
| With no block given, returns an enumerator. | ||||
							
								
								
									
										37
									
								
								doc/string/new.rdoc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								doc/string/new.rdoc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,37 @@ | |||
| Returns a new \String that is a copy of +string+. | ||||
| 
 | ||||
| With no arguments, returns the empty string with the Encoding <tt>ASCII-8BIT</tt>: | ||||
|   s = String.new | ||||
|   s # => "" | ||||
|   s.encoding # => #<Encoding:ASCII-8BIT> | ||||
| 
 | ||||
| With the single \String argument +string+, returns a copy of +string+ | ||||
| with the same encoding as +string+: | ||||
|   s = String.new('Que veut dire ça?') | ||||
|   s # => "Que veut dire ça?" | ||||
|   s.encoding # => #<Encoding:UTF-8> | ||||
| 
 | ||||
| Literal strings like <tt>""</tt> or here-documents always use | ||||
| Encoding@Script+encoding, unlike String.new. | ||||
| 
 | ||||
| With keyword +encoding+, returns a copy of +str+ | ||||
| with the specified encoding: | ||||
|   s = String.new(encoding: 'ASCII') | ||||
|   s.encoding # => #<Encoding:US-ASCII> | ||||
|   s = String.new('foo', encoding: 'ASCII') | ||||
|   s.encoding # => #<Encoding:US-ASCII> | ||||
| 
 | ||||
| Note that these are equivalent: | ||||
|   s0 = String.new('foo', encoding: 'ASCII') | ||||
|   s1 = 'foo'.force_encoding('ASCII') | ||||
|   s0.encoding == s1.encoding # => true | ||||
| 
 | ||||
| With keyword +capacity+, returns a copy of +str+; | ||||
| the given +capacity+ may set the size of the internal buffer, | ||||
| which may affect performance: | ||||
|   String.new(capacity: 1) # => "" | ||||
|   String.new(capacity: 4096) # => "" | ||||
| 
 | ||||
| The +string+, +encoding+, and +capacity+ arguments may all be used together: | ||||
| 
 | ||||
|   String.new('hello', encoding: 'UTF-8', capacity: 25) | ||||
							
								
								
									
										84
									
								
								doc/string/split.rdoc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								doc/string/split.rdoc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,84 @@ | |||
| Returns an array of substrings of +self+ | ||||
| that are the result of splitting +self+ | ||||
| at each occurrence of the given field separator +field_sep+. | ||||
| 
 | ||||
| When +field_sep+ is <tt>$;</tt>: | ||||
| 
 | ||||
| - If <tt>$;</tt> is +nil+ (its default value), | ||||
|   the split occurs just as if +field_sep+ were given as a space character | ||||
|   (see below). | ||||
| 
 | ||||
| - If <tt>$;</tt> is a string, | ||||
|   the split ocurs just as if +field_sep+ were given as that string | ||||
|   (see below). | ||||
| 
 | ||||
| When +field_sep+ is <tt>' '</tt> and +limit+ is +nil+, | ||||
| the split occurs at each sequence of whitespace: | ||||
| 
 | ||||
|   'abc def ghi'.split(' ')         => ["abc", "def", "ghi"] | ||||
|   "abc \n\tdef\t\n  ghi".split(' ') # => ["abc", "def", "ghi"] | ||||
|   'abc  def   ghi'.split(' ')      => ["abc", "def", "ghi"] | ||||
|   ''.split(' ')                    => [] | ||||
| 
 | ||||
| When +field_sep+ is a string different from <tt>' '</tt> | ||||
| and +limit+ is +nil+, | ||||
| the split occurs at each occurrence of +field_sep+; | ||||
| trailing empty substrings are not returned: | ||||
| 
 | ||||
|   'abracadabra'.split('ab')  => ["", "racad", "ra"] | ||||
|   'aaabcdaaa'.split('a')     => ["", "", "", "bcd"] | ||||
|   ''.split('a')              => [] | ||||
|   '3.14159'.split('1')       => ["3.", "4", "59"] | ||||
|   '!@#$%^$&*($)_+'.split('$') # => ["!@#", "%^", "&*(", ")_+"] | ||||
|   'тест'.split('т')          => ["", "ес"] | ||||
|   'こんにちは'.split('に')     => ["こん", "ちは"] | ||||
| 
 | ||||
| When +field_sep+ is a Regexp and +limit+ is +nil+, | ||||
| the split occurs at each occurrence of a match; | ||||
| trailing empty substrings are not returned: | ||||
| 
 | ||||
|   'abracadabra'.split(/ab/) # => ["", "racad", "ra"] | ||||
|   'aaabcdaaa'.split(/a/)   => ["", "", "", "bcd"] | ||||
|   'aaabcdaaa'.split(//)    => ["a", "a", "a", "b", "c", "d", "a", "a", "a"] | ||||
|   '1 + 1 == 2'.split(/\W+/) # => ["1", "1", "2"] | ||||
| 
 | ||||
| If the \Regexp contains groups, their matches are also included | ||||
| in the returned array: | ||||
| 
 | ||||
|   '1:2:3'.split(/(:)()()/, 2) # => ["1", ":", "", "", "2:3"] | ||||
| 
 | ||||
| As seen above, if +limit+ is +nil+, | ||||
| trailing empty substrings are not returned; | ||||
| the same is true if +limit+ is zero: | ||||
| 
 | ||||
|   'aaabcdaaa'.split('a')   => ["", "", "", "bcd"] | ||||
|   'aaabcdaaa'.split('a', 0) # => ["", "", "", "bcd"] | ||||
| 
 | ||||
| If +limit+ is positive integer +n+, no more than <tt>n - 1-</tt> | ||||
| splits occur, so that at most +n+ substrings are returned, | ||||
| and trailing empty substrings are included: | ||||
| 
 | ||||
|   'aaabcdaaa'.split('a', 1) # => ["aaabcdaaa"] | ||||
|   'aaabcdaaa'.split('a', 2) # => ["", "aabcdaaa"] | ||||
|   'aaabcdaaa'.split('a', 5) # => ["", "", "", "bcd", "aa"] | ||||
|   'aaabcdaaa'.split('a', 7) # => ["", "", "", "bcd", "", "", ""] | ||||
|   'aaabcdaaa'.split('a', 8) # => ["", "", "", "bcd", "", "", ""] | ||||
| 
 | ||||
| Note that if +field_sep+ is a \Regexp containing groups, | ||||
| their matches are in the returned array, but do not count toward the limit. | ||||
| 
 | ||||
| If +limit+ is negative, it behaves the same as if +limit+ was +nil+, | ||||
| meaning that there is no limit, | ||||
| and trailing empty substrings are included: | ||||
| 
 | ||||
|   'aaabcdaaa'.split('a', -1) # => ["", "", "", "bcd", "", "", ""] | ||||
| 
 | ||||
| If a block is given, it is called with each substring: | ||||
| 
 | ||||
|   'abc def ghi'.split(' ') {|substring| p substring } | ||||
| 
 | ||||
| Output: | ||||
| 
 | ||||
|   "abc" | ||||
|   "def" | ||||
|   "ghi" | ||||
							
								
								
									
										47
									
								
								string.c
									
										
									
									
									
								
							
							
						
						
									
										47
									
								
								string.c
									
										
									
									
									
								
							|  | @ -1810,7 +1810,17 @@ rb_ec_str_resurrect(struct rb_execution_context_struct *ec, VALUE str) | |||
|     return ec_str_duplicate(ec, rb_cString, str); | ||||
| } | ||||
| 
 | ||||
| /* :nodoc: documented in doc/string.rdoc */ | ||||
| /*
 | ||||
|  * | ||||
|  *  call-seq: | ||||
|  *    String.new(string = '') -> new_string | ||||
|  *    String.new(string = '', encoding: encoding) -> new_string | ||||
|  *    String.new(string = '', capacity: size) -> new_string | ||||
|  * | ||||
|  *  :include: doc/string/new.rdoc | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| static VALUE | ||||
| rb_str_init(int argc, VALUE *argv, VALUE str) | ||||
| { | ||||
|  | @ -8652,7 +8662,14 @@ literal_split_pattern(VALUE spat, split_type_t default_type) | |||
|     return default_type; | ||||
| } | ||||
| 
 | ||||
| // String#split is documented at doc/string.rdoc.
 | ||||
| /*
 | ||||
|  *  :call-seq: | ||||
|  *    split(field_sep = $;, limit = nil) -> array | ||||
|  *    split(field_sep = $;, limit = nil) {|substring| ... } -> self | ||||
|  * | ||||
|  *  :include: doc/string/split.rdoc | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| static VALUE | ||||
| rb_str_split_m(int argc, VALUE *argv, VALUE str) | ||||
|  | @ -9063,7 +9080,14 @@ rb_str_enumerate_lines(int argc, VALUE *argv, VALUE str, VALUE ary) | |||
| 	return orig; | ||||
| } | ||||
| 
 | ||||
| // String#each_line is documented at doc/string.rdoc.
 | ||||
| /*
 | ||||
|  *  call-seq: | ||||
|  *    each_line(line_sep = $/, chomp: false) {|substring| ... } -> self | ||||
|  *    each_line(line_sep = $/, chomp: false)                    -> enumerator | ||||
|  * | ||||
|  *  :include: doc/string/each_line.rdoc | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| static VALUE | ||||
| rb_str_each_line(int argc, VALUE *argv, VALUE str) | ||||
|  | @ -9108,7 +9132,14 @@ rb_str_enumerate_bytes(VALUE str, VALUE ary) | |||
| 	return str; | ||||
| } | ||||
| 
 | ||||
| // String#each_byte is documented in doc/string.rdoc.
 | ||||
| /*
 | ||||
|  *  call-seq: | ||||
|  *    each_byte {|byte| ... } -> self | ||||
|  *    each_byte               -> enumerator | ||||
|  * | ||||
|  *  :include: doc/string/each_byte.rdoc | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| static VALUE | ||||
| rb_str_each_byte(VALUE str) | ||||
|  | @ -9117,7 +9148,13 @@ rb_str_each_byte(VALUE str) | |||
|     return rb_str_enumerate_bytes(str, 0); | ||||
| } | ||||
| 
 | ||||
| // String#bytes is documented in doc/string.rdoc.
 | ||||
| /*
 | ||||
|  *  call-seq: | ||||
|  *    bytes -> array_of_bytes | ||||
|  * | ||||
|  *  :include: doc/string/bytes.rdoc | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| static VALUE | ||||
| rb_str_bytes(VALUE str) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Burdette Lamar
						Burdette Lamar