rbs 3.7.0 → 3.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/comments.yml +3 -3
- data/.github/workflows/ruby.yml +7 -7
- data/CHANGELOG.md +68 -0
- data/core/array.rbs +1756 -1591
- data/core/basic_object.rbs +38 -35
- data/core/comparable.rbs +1 -1
- data/core/complex.rbs +166 -94
- data/core/data.rbs +1 -1
- data/core/dir.rbs +1 -17
- data/core/encoding.rbs +12 -32
- data/core/enumerable.rbs +270 -266
- data/core/enumerator.rbs +0 -2
- data/core/env.rbs +1 -1
- data/core/errno.rbs +33 -16
- data/core/errors.rbs +6 -2
- data/core/exception.rbs +235 -169
- data/core/fiber.rbs +3 -2
- data/core/file.rbs +26 -75
- data/core/float.rbs +125 -72
- data/core/gc.rbs +156 -40
- data/core/hash.rbs +122 -143
- data/core/integer.rbs +79 -50
- data/core/io/buffer.rbs +49 -43
- data/core/io.rbs +99 -146
- data/core/kernel.rbs +292 -202
- data/core/match_data.rbs +76 -2
- data/core/math.rbs +0 -36
- data/core/module.rbs +28 -23
- data/core/nil_class.rbs +2 -2
- data/core/numeric.rbs +101 -104
- data/core/object.rbs +0 -4
- data/core/object_space/weak_key_map.rbs +3 -4
- data/core/object_space.rbs +3 -3
- data/core/proc.rbs +80 -12
- data/core/process.rbs +109 -57
- data/core/ractor.rbs +54 -4
- data/core/range.rbs +114 -87
- data/core/rational.rbs +0 -2
- data/core/rbs/unnamed/argf.rbs +234 -33
- data/core/rbs/unnamed/env_class.rbs +35 -53
- data/core/rbs/unnamed/random.rbs +1 -2
- data/core/regexp.rbs +6 -54
- data/core/ruby_vm.rbs +88 -9
- data/core/rubygems/config_file.rbs +3 -0
- data/core/rubygems/errors.rbs +3 -6
- data/core/rubygems/platform.rbs +0 -9
- data/core/rubygems/rubygems.rbs +3 -6
- data/core/rubygems/version.rbs +6 -6
- data/core/set.rbs +3 -15
- data/core/string.rbs +256 -260
- data/core/struct.rbs +6 -18
- data/core/symbol.rbs +14 -21
- data/core/thread.rbs +32 -35
- data/core/time.rbs +131 -50
- data/core/trace_point.rbs +124 -113
- data/core/true_class.rbs +0 -1
- data/core/warning.rbs +9 -2
- data/docs/architecture.md +1 -1
- data/docs/syntax.md +1 -1
- data/ext/rbs_extension/location.c +29 -19
- data/ext/rbs_extension/parser.c +268 -293
- data/ext/rbs_extension/parserstate.c +56 -22
- data/lib/rbs/annotate/annotations.rb +3 -3
- data/lib/rbs/annotate/rdoc_source.rb +2 -2
- data/lib/rbs/cli/diff.rb +3 -3
- data/lib/rbs/cli/validate.rb +1 -1
- data/lib/rbs/cli.rb +13 -13
- data/lib/rbs/collection/config.rb +3 -1
- data/lib/rbs/definition_builder/ancestor_builder.rb +3 -3
- data/lib/rbs/environment_loader.rb +1 -1
- data/lib/rbs/namespace.rb +1 -0
- data/lib/rbs/parser_aux.rb +2 -2
- data/lib/rbs/prototype/rb.rb +11 -8
- data/lib/rbs/prototype/rbi.rb +9 -5
- data/lib/rbs/prototype/runtime/value_object_generator.rb +7 -5
- data/lib/rbs/prototype/runtime.rb +4 -5
- data/lib/rbs/type_name.rb +14 -9
- data/lib/rbs/types.rb +2 -1
- data/lib/rbs/unit_test/type_assertions.rb +2 -2
- data/lib/rbs/validator.rb +3 -1
- data/lib/rbs/version.rb +1 -1
- data/lib/rdoc_plugin/parser.rb +2 -2
- data/rbs.gemspec +4 -0
- data/sig/ancestor_graph.rbs +4 -4
- data/sig/namespace.rbs +2 -3
- data/sig/resolver/constant_resolver.rbs +2 -2
- data/sig/resolver/context.rbs +1 -1
- data/sig/type_alias_regularity.rbs +5 -5
- data/sig/typename.rbs +8 -5
- data/sig/use_map.rbs +1 -1
- data/sig/validator.rbs +2 -2
- data/stdlib/base64/0/base64.rbs +0 -9
- data/stdlib/benchmark/0/benchmark.rbs +11 -2
- data/stdlib/bigdecimal/0/big_decimal.rbs +26 -182
- data/stdlib/cgi/0/core.rbs +47 -0
- data/stdlib/coverage/0/coverage.rbs +0 -3
- data/stdlib/csv/0/csv.rbs +18 -58
- data/stdlib/date/0/date.rbs +27 -42
- data/stdlib/did_you_mean/0/did_you_mean.rbs +0 -5
- data/stdlib/digest/0/digest.rbs +25 -2
- data/stdlib/erb/0/erb.rbs +0 -1
- data/stdlib/etc/0/etc.rbs +51 -34
- data/stdlib/fileutils/0/fileutils.rbs +3 -44
- data/stdlib/io-console/0/io-console.rbs +69 -15
- data/stdlib/ipaddr/0/ipaddr.rbs +8 -4
- data/stdlib/json/0/json.rbs +56 -71
- data/stdlib/logger/0/log_device.rbs +1 -1
- data/stdlib/logger/0/logger.rbs +3 -18
- data/stdlib/net-http/0/net-http.rbs +39 -106
- data/stdlib/nkf/0/nkf.rbs +30 -0
- data/stdlib/objspace/0/objspace.rbs +1 -2
- data/stdlib/observable/0/observable.rbs +1 -1
- data/stdlib/open-uri/0/open-uri.rbs +52 -0
- data/stdlib/open3/0/open3.rbs +0 -8
- data/stdlib/openssl/0/openssl.rbs +136 -69
- data/stdlib/optparse/0/optparse.rbs +58 -18
- data/stdlib/pathname/0/pathname.rbs +2 -8
- data/stdlib/pp/0/pp.rbs +3 -1
- data/stdlib/prettyprint/0/prettyprint.rbs +0 -4
- data/stdlib/pstore/0/pstore.rbs +0 -6
- data/stdlib/psych/0/psych.rbs +15 -4
- data/stdlib/pty/0/pty.rbs +46 -4
- data/stdlib/rdoc/0/code_object.rbs +0 -4
- data/stdlib/rdoc/0/markup.rbs +10 -12
- data/stdlib/rdoc/0/rdoc.rbs +13 -8
- data/stdlib/resolv/0/resolv.rbs +13 -4
- data/stdlib/ripper/0/ripper.rbs +0 -2
- data/stdlib/securerandom/0/securerandom.rbs +7 -2
- data/stdlib/shellwords/0/shellwords.rbs +11 -12
- data/stdlib/singleton/0/singleton.rbs +0 -1
- data/stdlib/socket/0/addrinfo.rbs +0 -1
- data/stdlib/socket/0/basic_socket.rbs +0 -5
- data/stdlib/socket/0/socket.rbs +32 -27
- data/stdlib/socket/0/tcp_server.rbs +0 -3
- data/stdlib/socket/0/tcp_socket.rbs +36 -3
- data/stdlib/socket/0/udp_socket.rbs +0 -1
- data/stdlib/socket/0/unix_server.rbs +0 -3
- data/stdlib/strscan/0/string_scanner.rbs +1265 -422
- data/stdlib/tempfile/0/tempfile.rbs +135 -28
- data/stdlib/time/0/time.rbs +48 -35
- data/stdlib/timeout/0/timeout.rbs +11 -8
- data/stdlib/tmpdir/0/tmpdir.rbs +10 -3
- data/stdlib/tsort/0/tsort.rbs +0 -4
- data/stdlib/uri/0/common.rbs +11 -30
- data/stdlib/uri/0/ftp.rbs +1 -1
- data/stdlib/uri/0/generic.rbs +22 -18
- data/stdlib/uri/0/http.rbs +2 -2
- data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
- data/stdlib/zlib/0/buf_error.rbs +1 -70
- data/stdlib/zlib/0/data_error.rbs +1 -70
- data/stdlib/zlib/0/deflate.rbs +8 -72
- data/stdlib/zlib/0/error.rbs +1 -70
- data/stdlib/zlib/0/gzip_file/crc_error.rbs +2 -105
- data/stdlib/zlib/0/gzip_file/error.rbs +2 -105
- data/stdlib/zlib/0/gzip_file/length_error.rbs +2 -105
- data/stdlib/zlib/0/gzip_file/no_footer.rbs +2 -105
- data/stdlib/zlib/0/gzip_file.rbs +1 -71
- data/stdlib/zlib/0/gzip_reader.rbs +3 -74
- data/stdlib/zlib/0/gzip_writer.rbs +1 -70
- data/stdlib/zlib/0/inflate.rbs +4 -71
- data/stdlib/zlib/0/mem_error.rbs +1 -70
- data/stdlib/zlib/0/need_dict.rbs +1 -70
- data/stdlib/zlib/0/stream_end.rbs +1 -70
- data/stdlib/zlib/0/stream_error.rbs +1 -70
- data/stdlib/zlib/0/version_error.rbs +1 -70
- data/stdlib/zlib/0/zlib.rbs +0 -2
- data/stdlib/zlib/0/zstream.rbs +4 -72
- metadata +3 -6
data/core/range.rbs
CHANGED
@@ -13,15 +13,13 @@
|
|
13
13
|
# (1...4).to_a # => [1, 2, 3]
|
14
14
|
# ('a'...'d').to_a # => ["a", "b", "c"]
|
15
15
|
#
|
16
|
+
# * Method Range.new:
|
16
17
|
#
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
# Range.new(1, 4).to_a # => [1, 2, 3,
|
21
|
-
#
|
22
|
-
# # Ranges that use third argument +exclude_end+ to exclude the given end value.
|
23
|
-
# Range.new(1, 4, true).to_a # => [1, 2, 3]
|
24
|
-
# Range.new('a', 'd', true).to_a # => ["a", "b", "c"]
|
18
|
+
# # Ranges that by default include the given end value. Range.new(1, 4).to_a
|
19
|
+
# # => [1, 2, 3, 4] Range.new('a', 'd').to_a # => ["a", "b", "c", "d"] #
|
20
|
+
# Ranges that use third argument `exclude_end` to exclude the given end
|
21
|
+
# value. Range.new(1, 4, true).to_a # => [1, 2, 3] Range.new('a', 'd',
|
22
|
+
# true).to_a # => ["a", "b", "c"]
|
25
23
|
#
|
26
24
|
# ## Beginless Ranges
|
27
25
|
#
|
@@ -42,8 +40,12 @@
|
|
42
40
|
# A beginless range may be used to slice an array:
|
43
41
|
#
|
44
42
|
# a = [1, 2, 3, 4]
|
45
|
-
#
|
46
|
-
#
|
43
|
+
# # Include the third array element in the slice
|
44
|
+
# r = (..2) # => nil..2
|
45
|
+
# a[r] # => [1, 2, 3]
|
46
|
+
# # Exclude the third array element from the slice
|
47
|
+
# r = (...2) # => nil...2
|
48
|
+
# a[r] # => [1, 2]
|
47
49
|
#
|
48
50
|
# Method `each` for a beginless range raises an exception.
|
49
51
|
#
|
@@ -96,8 +98,8 @@
|
|
96
98
|
# ## Ranges and Other Classes
|
97
99
|
#
|
98
100
|
# An object may be put into a range if its class implements instance method
|
99
|
-
#
|
100
|
-
# Integer, Kernel, Module, Numeric, Rational, String, Symbol, and Time.
|
101
|
+
# `#<=>`. Ruby core classes that do so include Array, Complex, File::Stat,
|
102
|
+
# Float, Integer, Kernel, Module, Numeric, Rational, String, Symbol, and Time.
|
101
103
|
#
|
102
104
|
# Example:
|
103
105
|
#
|
@@ -117,7 +119,6 @@
|
|
117
119
|
# * Included from module Enumerable: #each_entry, #each_with_index,
|
118
120
|
# #each_with_object, #each_slice, #each_cons, and #reverse_each.
|
119
121
|
#
|
120
|
-
#
|
121
122
|
# Example:
|
122
123
|
#
|
123
124
|
# a = []
|
@@ -127,12 +128,12 @@
|
|
127
128
|
# ## Ranges and User-Defined Classes
|
128
129
|
#
|
129
130
|
# A user-defined class that is to be used in a range must implement instance
|
130
|
-
#
|
131
|
-
# instance method `succ`; see Integer#succ.
|
131
|
+
# method `#<=>`; see Integer#<=>. To make iteration available, it must also
|
132
|
+
# implement instance method `succ`; see Integer#succ.
|
132
133
|
#
|
133
|
-
# The class below implements both
|
134
|
+
# The class below implements both `#<=>` and `succ`, and so can be used both to
|
134
135
|
# construct ranges and to iterate over them. Note that the Comparable module is
|
135
|
-
# included so the `==` method is defined in terms of
|
136
|
+
# included so the `==` method is defined in terms of `#<=>`.
|
136
137
|
#
|
137
138
|
# # Represent a string of 'X' characters.
|
138
139
|
# class Xs
|
@@ -168,7 +169,6 @@
|
|
168
169
|
# * Includes [module Enumerable](rdoc-ref:Enumerable@What-27s+Here), which
|
169
170
|
# provides dozens of additional methods.
|
170
171
|
#
|
171
|
-
#
|
172
172
|
# Here, class Range provides methods that are useful for:
|
173
173
|
#
|
174
174
|
# * [Creating a Range](rdoc-ref:Range@Methods+for+Creating+a+Range)
|
@@ -179,12 +179,10 @@
|
|
179
179
|
# * [Methods for Working with
|
180
180
|
# JSON](rdoc-ref:Range@Methods+for+Working+with+JSON)
|
181
181
|
#
|
182
|
-
#
|
183
182
|
# ### Methods for Creating a Range
|
184
183
|
#
|
185
184
|
# * ::new: Returns a new range.
|
186
185
|
#
|
187
|
-
#
|
188
186
|
# ### Methods for Querying
|
189
187
|
#
|
190
188
|
# * #begin: Returns the begin value given for `self`.
|
@@ -200,7 +198,6 @@
|
|
200
198
|
# * #minmax: Returns the minimum and maximum values in `self`.
|
201
199
|
# * #size: Returns the count of elements in `self`.
|
202
200
|
#
|
203
|
-
#
|
204
201
|
# ### Methods for Comparing
|
205
202
|
#
|
206
203
|
# * #==: Returns whether a given object is equal to `self` (uses #==).
|
@@ -211,7 +208,6 @@
|
|
211
208
|
# * #include? (aliased as #member?): Returns whether a given object is an
|
212
209
|
# element of `self`.
|
213
210
|
#
|
214
|
-
#
|
215
211
|
# ### Methods for Iterating
|
216
212
|
#
|
217
213
|
# * #%: Requires argument `n`; calls the block with each `n`-th element of
|
@@ -220,14 +216,12 @@
|
|
220
216
|
# * #step: Takes optional argument `n` (defaults to 1); calls the block with
|
221
217
|
# each `n`-th element of `self`.
|
222
218
|
#
|
223
|
-
#
|
224
219
|
# ### Methods for Converting
|
225
220
|
#
|
226
221
|
# * #inspect: Returns a string representation of `self` (uses #inspect).
|
227
222
|
# * #to_a (aliased as #entries): Returns elements of `self` in an array.
|
228
223
|
# * #to_s: Returns a string representation of `self` (uses #to_s).
|
229
224
|
#
|
230
|
-
#
|
231
225
|
# ### Methods for Working with JSON
|
232
226
|
#
|
233
227
|
# * ::json_create: Returns a new Range object constructed from the given
|
@@ -235,7 +229,6 @@
|
|
235
229
|
# * #as_json: Returns a 2-element hash representing `self`.
|
236
230
|
# * #to_json: Returns a JSON string representing `self`.
|
237
231
|
#
|
238
|
-
#
|
239
232
|
# To make these methods available:
|
240
233
|
#
|
241
234
|
# require 'json/add/range'
|
@@ -246,29 +239,24 @@ class Range[out Elem] < Object
|
|
246
239
|
# <!--
|
247
240
|
# rdoc-file=range.c
|
248
241
|
# - %(n) {|element| ... } -> self
|
249
|
-
# - %(n) -> enumerator
|
242
|
+
# - %(n) -> enumerator or arithmetic_sequence
|
250
243
|
# -->
|
251
|
-
#
|
244
|
+
# Same as #step (but doesn't provide default value for `n`). The method is
|
245
|
+
# convenient for experssive producing of Enumerator::ArithmeticSequence.
|
252
246
|
#
|
253
|
-
#
|
254
|
-
# returns `self`:
|
247
|
+
# array = [0, 1, 2, 3, 4, 5, 6]
|
255
248
|
#
|
256
|
-
#
|
257
|
-
#
|
258
|
-
#
|
259
|
-
#
|
260
|
-
# (
|
261
|
-
# a # => ["a", "c", "e"]
|
262
|
-
#
|
263
|
-
# With no block given, returns an enumerator, which will be of class
|
264
|
-
# Enumerator::ArithmeticSequence if `self` is numeric; otherwise of class
|
265
|
-
# Enumerator:
|
249
|
+
# # slice each second element:
|
250
|
+
# seq = (0..) % 2 #=> ((0..).%(2))
|
251
|
+
# array[seq] #=> [0, 2, 4, 6]
|
252
|
+
# # or just
|
253
|
+
# array[(0..) % 2] #=> [0, 2, 4, 6]
|
266
254
|
#
|
267
|
-
#
|
268
|
-
#
|
269
|
-
# ('a'..'e') % 2 # => #<Enumerator: ...>
|
255
|
+
# Note that due to operator precedence in Ruby, parentheses are mandatory around
|
256
|
+
# range in this case:
|
270
257
|
#
|
271
|
-
#
|
258
|
+
# (0..7) % 2 #=> ((0..7).%(2)) -- as expected
|
259
|
+
# 0..7 % 2 #=> 0..1 -- parsed as 0..(7 % 2)
|
272
260
|
#
|
273
261
|
def %: (Numeric | int n) -> Enumerator[Elem, self]
|
274
262
|
| (Numeric | int n) { (Elem element) -> void } -> self
|
@@ -284,7 +272,6 @@ class Range[out Elem] < Object
|
|
284
272
|
# * `other.end == self.end`.
|
285
273
|
# * `other.exclude_end? == self.exclude_end?`.
|
286
274
|
#
|
287
|
-
#
|
288
275
|
# Otherwise returns `false`.
|
289
276
|
#
|
290
277
|
# r = (1..5)
|
@@ -447,10 +434,9 @@ class Range[out Elem] < Object
|
|
447
434
|
# Returns `false` if either:
|
448
435
|
#
|
449
436
|
# * The begin value of `self` is larger than its end value.
|
450
|
-
# * An internal call to
|
437
|
+
# * An internal call to `#<=>` returns `nil`; that is, the operands are not
|
451
438
|
# comparable.
|
452
439
|
#
|
453
|
-
#
|
454
440
|
# Beginless ranges cover all values of the same type before the end, excluding
|
455
441
|
# the end for exclusive ranges. Beginless ranges cover ranges that end before
|
456
442
|
# the end of the beginless range, or at the end of the beginless range for
|
@@ -682,7 +668,7 @@ class Range[out Elem] < Object
|
|
682
668
|
# - max {|a, b| ... } -> object
|
683
669
|
# - max(n) {|a, b| ... } -> array
|
684
670
|
# -->
|
685
|
-
# Returns the maximum value in `self`, using method
|
671
|
+
# Returns the maximum value in `self`, using method `#<=>` or a given block for
|
686
672
|
# comparison.
|
687
673
|
#
|
688
674
|
# With no argument and no block given, returns the maximum-valued element of
|
@@ -706,7 +692,6 @@ class Range[out Elem] < Object
|
|
706
692
|
# * Then, sequentially, with the so-far maximum value and the next element of
|
707
693
|
# `self`.
|
708
694
|
#
|
709
|
-
#
|
710
695
|
# To illustrate:
|
711
696
|
#
|
712
697
|
# (1..4).max {|a, b| p [a, b]; a <=> b } # => 4
|
@@ -749,13 +734,11 @@ class Range[out Elem] < Object
|
|
749
734
|
# (1...1).max {|a, b| -(a <=> b) } # => nil
|
750
735
|
# (1...1).max(2) {|a, b| -(a <=> b) } # => []
|
751
736
|
#
|
752
|
-
#
|
753
737
|
# Raises an exception if either:
|
754
738
|
#
|
755
739
|
# * `self` is a endless range: `(1..)`.
|
756
740
|
# * A block is given and `self` is a beginless range.
|
757
741
|
#
|
758
|
-
#
|
759
742
|
# Related: Range#min, Range#minmax.
|
760
743
|
#
|
761
744
|
def max: () -> Elem
|
@@ -770,7 +753,7 @@ class Range[out Elem] < Object
|
|
770
753
|
# - min {|a, b| ... } -> object
|
771
754
|
# - min(n) {|a, b| ... } -> array
|
772
755
|
# -->
|
773
|
-
# Returns the minimum value in `self`, using method
|
756
|
+
# Returns the minimum value in `self`, using method `#<=>` or a given block for
|
774
757
|
# comparison.
|
775
758
|
#
|
776
759
|
# With no argument and no block given, returns the minimum-valued element of
|
@@ -794,7 +777,6 @@ class Range[out Elem] < Object
|
|
794
777
|
# * Then, sequentially, with the so-far minimum value and the next element of
|
795
778
|
# `self`.
|
796
779
|
#
|
797
|
-
#
|
798
780
|
# To illustrate:
|
799
781
|
#
|
800
782
|
# (1..4).min {|a, b| p [a, b]; a <=> b } # => 1
|
@@ -837,13 +819,11 @@ class Range[out Elem] < Object
|
|
837
819
|
# (1...1).min {|a, b| -(a <=> b) } # => nil
|
838
820
|
# (1...1).min(2) {|a, b| -(a <=> b) } # => []
|
839
821
|
#
|
840
|
-
#
|
841
822
|
# Raises an exception if either:
|
842
823
|
#
|
843
824
|
# * `self` is a beginless range: `(..4)`.
|
844
825
|
# * A block is given and `self` is an endless range.
|
845
826
|
#
|
846
|
-
#
|
847
827
|
# Related: Range#max, Range#minmax.
|
848
828
|
#
|
849
829
|
def min: () -> Elem
|
@@ -865,7 +845,7 @@ class Range[out Elem] < Object
|
|
865
845
|
#
|
866
846
|
# (1..3).overlap?(1) # TypeError
|
867
847
|
#
|
868
|
-
# Returns `false` if an internal call to
|
848
|
+
# Returns `false` if an internal call to `#<=>` returns `nil`; that is, the
|
869
849
|
# operands are not comparable.
|
870
850
|
#
|
871
851
|
# (1..3).overlap?('a'..'d') # => false
|
@@ -947,7 +927,12 @@ class Range[out Elem] < Object
|
|
947
927
|
# (1..4).size # => 4
|
948
928
|
# (1...4).size # => 3
|
949
929
|
# (1..).size # => Infinity
|
950
|
-
# ('a'..'z').size
|
930
|
+
# ('a'..'z').size # => nil
|
931
|
+
#
|
932
|
+
# If `self` is not iterable, raises an exception:
|
933
|
+
#
|
934
|
+
# (0.5..2.5).size # TypeError
|
935
|
+
# (..1).size # TypeError
|
951
936
|
#
|
952
937
|
# Related: Range#count.
|
953
938
|
#
|
@@ -956,43 +941,86 @@ class Range[out Elem] < Object
|
|
956
941
|
|
957
942
|
# <!--
|
958
943
|
# rdoc-file=range.c
|
959
|
-
# - step(
|
960
|
-
# - step(
|
944
|
+
# - step(s = 1) {|element| ... } -> self
|
945
|
+
# - step(s = 1) -> enumerator/arithmetic_sequence
|
961
946
|
# -->
|
962
|
-
# Iterates over the elements of `
|
947
|
+
# Iterates over the elements of range in steps of `s`. The iteration is
|
948
|
+
# performed by `+` operator:
|
963
949
|
#
|
964
|
-
#
|
965
|
-
#
|
950
|
+
# (0..6).step(2) { puts _1 } #=> 1..5
|
951
|
+
# # Prints: 0, 2, 4, 6
|
966
952
|
#
|
967
|
-
#
|
968
|
-
# (
|
969
|
-
#
|
970
|
-
#
|
971
|
-
#
|
972
|
-
#
|
953
|
+
# # Iterate between two dates in step of 1 day (24 hours)
|
954
|
+
# (Time.utc(2022, 2, 24)..Time.utc(2022, 3, 1)).step(24*60*60) { puts _1 }
|
955
|
+
# # Prints:
|
956
|
+
# # 2022-02-24 00:00:00 UTC
|
957
|
+
# # 2022-02-25 00:00:00 UTC
|
958
|
+
# # 2022-02-26 00:00:00 UTC
|
959
|
+
# # 2022-02-27 00:00:00 UTC
|
960
|
+
# # 2022-02-28 00:00:00 UTC
|
961
|
+
# # 2022-03-01 00:00:00 UTC
|
973
962
|
#
|
974
|
-
#
|
975
|
-
#
|
963
|
+
# If ` + step` decreases the value, iteration is still performed when step
|
964
|
+
# `begin` is higher than the `end`:
|
976
965
|
#
|
977
|
-
#
|
978
|
-
#
|
979
|
-
#
|
980
|
-
#
|
981
|
-
#
|
982
|
-
#
|
966
|
+
# (0..6).step(-2) { puts _1 }
|
967
|
+
# # Prints nothing
|
968
|
+
#
|
969
|
+
# (6..0).step(-2) { puts _1 }
|
970
|
+
# # Prints: 6, 4, 2, 0
|
971
|
+
#
|
972
|
+
# (Time.utc(2022, 3, 1)..Time.utc(2022, 2, 24)).step(-24*60*60) { puts _1 }
|
973
|
+
# # Prints:
|
974
|
+
# # 2022-03-01 00:00:00 UTC
|
975
|
+
# # 2022-02-28 00:00:00 UTC
|
976
|
+
# # 2022-02-27 00:00:00 UTC
|
977
|
+
# # 2022-02-26 00:00:00 UTC
|
978
|
+
# # 2022-02-25 00:00:00 UTC
|
979
|
+
# # 2022-02-24 00:00:00 UTC
|
980
|
+
#
|
981
|
+
# When the block is not provided, and range boundaries and step are Numeric, the
|
982
|
+
# method returns Enumerator::ArithmeticSequence.
|
983
983
|
#
|
984
|
-
#
|
985
|
-
#
|
986
|
-
#
|
984
|
+
# (1..5).step(2) # => ((1..5).step(2))
|
985
|
+
# (1.0..).step(1.5) #=> ((1.0..).step(1.5))
|
986
|
+
# (..3r).step(1/3r) #=> ((..3/1).step((1/3)))
|
987
987
|
#
|
988
|
-
#
|
989
|
-
#
|
990
|
-
#
|
988
|
+
# Enumerator::ArithmeticSequence can be further used as a value object for
|
989
|
+
# iteration or slicing of collections (see Array#[]). There is a convenience
|
990
|
+
# method #% with behavior similar to `step` to produce arithmetic sequences more
|
991
|
+
# expressively:
|
991
992
|
#
|
992
|
-
#
|
993
|
+
# # Same as (1..5).step(2)
|
994
|
+
# (1..5) % 2 # => ((1..5).%(2))
|
993
995
|
#
|
994
|
-
|
995
|
-
|
996
|
+
# In a generic case, when the block is not provided, Enumerator is returned:
|
997
|
+
#
|
998
|
+
# ('a'..).step('b') #=> #<Enumerator: "a"..:step("b")>
|
999
|
+
# ('a'..).step('b').take(3) #=> ["a", "ab", "abb"]
|
1000
|
+
#
|
1001
|
+
# If `s` is not provided, it is considered `1` for ranges with numeric `begin`:
|
1002
|
+
#
|
1003
|
+
# (1..5).step { p _1 }
|
1004
|
+
# # Prints: 1, 2, 3, 4, 5
|
1005
|
+
#
|
1006
|
+
# For non-Numeric ranges, step absence is an error:
|
1007
|
+
#
|
1008
|
+
# (Time.utc(2022, 3, 1)..Time.utc(2022, 2, 24)).step { p _1 }
|
1009
|
+
# # raises: step is required for non-numeric ranges (ArgumentError)
|
1010
|
+
#
|
1011
|
+
# For backward compatibility reasons, String ranges support the iteration both
|
1012
|
+
# with string step and with integer step. In the latter case, the iteration is
|
1013
|
+
# performed by calculating the next values with String#succ:
|
1014
|
+
#
|
1015
|
+
# ('a'..'e').step(2) { p _1 }
|
1016
|
+
# # Prints: a, c, e
|
1017
|
+
# ('a'..'e').step { p _1 }
|
1018
|
+
# # Default step 1; prints: a, b, c, d, e
|
1019
|
+
#
|
1020
|
+
def step: (?Numeric | int) -> Enumerator[Elem, self]
|
1021
|
+
| (?Numeric | int) { (Elem element) -> void } -> self
|
1022
|
+
| (untyped) -> Enumerator[Elem, self]
|
1023
|
+
| (untyped) { (Elem element) -> void } -> self
|
996
1024
|
|
997
1025
|
# <!--
|
998
1026
|
# rdoc-file=range.c
|
@@ -1022,11 +1050,10 @@ class Range[out Elem] < Object
|
|
1022
1050
|
# Returns `true` if and only if:
|
1023
1051
|
#
|
1024
1052
|
# * `other` is a range.
|
1025
|
-
# * `other.begin
|
1026
|
-
# * `other.end
|
1053
|
+
# * `other.begin.eql?(self.begin)`.
|
1054
|
+
# * `other.end.eql?(self.end)`.
|
1027
1055
|
# * `other.exclude_end? == self.exclude_end?`.
|
1028
1056
|
#
|
1029
|
-
#
|
1030
1057
|
# Otherwise returns `false`.
|
1031
1058
|
#
|
1032
1059
|
# r = (1..5)
|
data/core/rational.rbs
CHANGED