rbs 0.13.1 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +1 -1
- data/.gitignore +0 -1
- data/CHANGELOG.md +7 -2
- data/Gemfile +3 -0
- data/README.md +8 -2
- data/Steepfile +1 -0
- data/bin/annotate-with-rdoc +1 -1
- data/bin/setup +0 -2
- data/docs/CONTRIBUTING.md +1 -0
- data/goodcheck.yml +22 -5
- data/lib/rbs/ast/comment.rb +1 -1
- data/lib/rbs/definition_builder.rb +4 -5
- data/lib/rbs/environment.rb +1 -1
- data/lib/rbs/namespace.rb +1 -1
- data/lib/rbs/parser.rb +3146 -0
- data/lib/rbs/parser.y +7 -2
- data/lib/rbs/test/setup_helper.rb +4 -4
- data/lib/rbs/test/type_check.rb +2 -2
- data/lib/rbs/type_name.rb +1 -1
- data/lib/rbs/variance_calculator.rb +1 -1
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs/writer.rb +1 -1
- data/sig/constant.rbs +2 -2
- data/sig/constant_table.rbs +10 -10
- data/sig/declarations.rbs +1 -1
- data/sig/definition.rbs +1 -1
- data/sig/namespace.rbs +3 -3
- data/sig/parser.rbs +25 -0
- data/sig/substitution.rbs +3 -3
- data/sig/typename.rbs +1 -1
- data/sig/types.rbs +1 -1
- data/sig/writer.rbs +15 -15
- data/stdlib/benchmark/benchmark.rbs +2 -2
- data/stdlib/builtin/basic_object.rbs +54 -54
- data/stdlib/builtin/binding.rbs +42 -42
- data/stdlib/builtin/class.rbs +33 -33
- data/stdlib/builtin/complex.rbs +90 -90
- data/stdlib/builtin/encoding.rbs +33 -33
- data/stdlib/builtin/enumerable.rbs +32 -32
- data/stdlib/builtin/enumerator.rbs +35 -35
- data/stdlib/builtin/errors.rbs +1 -1
- data/stdlib/builtin/exception.rbs +50 -50
- data/stdlib/builtin/false_class.rbs +6 -6
- data/stdlib/builtin/fiber.rbs +14 -14
- data/stdlib/builtin/fiber_error.rbs +1 -1
- data/stdlib/builtin/float.rbs +161 -161
- data/stdlib/builtin/gc.rbs +1 -1
- data/stdlib/builtin/io.rbs +83 -83
- data/stdlib/builtin/kernel.rbs +69 -69
- data/stdlib/builtin/match_data.rbs +1 -1
- data/stdlib/builtin/method.rbs +19 -19
- data/stdlib/builtin/nil_class.rbs +20 -20
- data/stdlib/builtin/numeric.rbs +101 -101
- data/stdlib/builtin/object.rbs +172 -172
- data/stdlib/builtin/proc.rbs +91 -91
- data/stdlib/builtin/range.rbs +2 -4
- data/stdlib/builtin/rational.rbs +83 -83
- data/stdlib/builtin/signal.rbs +7 -7
- data/stdlib/builtin/string.rbs +4 -4
- data/stdlib/builtin/string_io.rbs +1 -1
- data/stdlib/builtin/thread.rbs +185 -185
- data/stdlib/builtin/thread_group.rbs +2 -2
- data/stdlib/builtin/true_class.rbs +9 -9
- data/stdlib/builtin/warning.rbs +1 -1
- data/stdlib/date/date.rbs +2 -2
- data/stdlib/find/find.rbs +10 -10
- data/stdlib/pathname/pathname.rbs +1 -1
- data/stdlib/tmpdir/tmpdir.rbs +12 -12
- metadata +3 -2
@@ -1,81 +1,81 @@
|
|
1
1
|
# The class of the singleton object `nil`.
|
2
|
-
#
|
2
|
+
#
|
3
3
|
class NilClass
|
4
4
|
public
|
5
5
|
|
6
6
|
# And---Returns `false`. *obj* is always evaluated as it is the argument to a
|
7
7
|
# method call---there is no short-circuit evaluation in this case.
|
8
|
-
#
|
8
|
+
#
|
9
9
|
def &: (untyped obj) -> bool
|
10
10
|
|
11
11
|
# Case Equality -- For class Object, effectively the same as calling `#==`, but
|
12
12
|
# typically overridden by descendants to provide meaningful semantics in `case`
|
13
13
|
# statements.
|
14
|
-
#
|
14
|
+
#
|
15
15
|
def ===: (nil) -> true
|
16
16
|
| (untyped obj) -> bool
|
17
17
|
|
18
18
|
# Dummy pattern matching -- always returns nil.
|
19
|
-
#
|
19
|
+
#
|
20
20
|
def =~: (untyped obj) -> nil
|
21
21
|
|
22
22
|
# Exclusive Or---If *obj* is `nil` or `false`, returns `false`; otherwise,
|
23
23
|
# returns `true`.
|
24
|
-
#
|
24
|
+
#
|
25
25
|
def ^: (nil) -> false
|
26
26
|
| (false) -> false
|
27
27
|
| (untyped obj) -> bool
|
28
28
|
|
29
29
|
# Always returns the string "nil".
|
30
|
-
#
|
30
|
+
#
|
31
31
|
def inspect: () -> "nil"
|
32
32
|
|
33
33
|
# Only the object *nil* responds `true` to `nil?`.
|
34
|
-
#
|
34
|
+
#
|
35
35
|
def nil?: () -> bool
|
36
36
|
|
37
37
|
# Returns zero as a rational. The optional argument `eps` is always ignored.
|
38
|
-
#
|
38
|
+
#
|
39
39
|
def rationalize: (?untyped eps) -> Rational
|
40
40
|
|
41
41
|
# Always returns an empty array.
|
42
|
-
#
|
42
|
+
#
|
43
43
|
# nil.to_a #=> []
|
44
|
-
#
|
44
|
+
#
|
45
45
|
def to_a: () -> [ ]
|
46
46
|
|
47
47
|
# Returns zero as a complex.
|
48
|
-
#
|
48
|
+
#
|
49
49
|
def to_c: () -> Complex
|
50
50
|
|
51
51
|
# Always returns zero.
|
52
|
-
#
|
52
|
+
#
|
53
53
|
# nil.to_f #=> 0.0
|
54
|
-
#
|
54
|
+
#
|
55
55
|
def to_f: () -> Float
|
56
56
|
|
57
57
|
# Always returns an empty hash.
|
58
|
-
#
|
58
|
+
#
|
59
59
|
# nil.to_h #=> {}
|
60
|
-
#
|
60
|
+
#
|
61
61
|
def to_h: () -> ::Hash[untyped, untyped]
|
62
62
|
|
63
63
|
# Always returns zero.
|
64
|
-
#
|
64
|
+
#
|
65
65
|
# nil.to_i #=> 0
|
66
|
-
#
|
66
|
+
#
|
67
67
|
def to_i: () -> 0
|
68
68
|
|
69
69
|
# Returns zero as a rational.
|
70
|
-
#
|
70
|
+
#
|
71
71
|
def to_r: () -> Rational
|
72
72
|
|
73
73
|
# Always returns the empty string.
|
74
|
-
#
|
74
|
+
#
|
75
75
|
def to_s: () -> ""
|
76
76
|
|
77
77
|
# Or---Returns `false` if *obj* is `nil` or `false`; `true` otherwise.
|
78
|
-
#
|
78
|
+
#
|
79
79
|
def |: (nil) -> false
|
80
80
|
| (false) -> false
|
81
81
|
| (untyped obj) -> bool
|
data/stdlib/builtin/numeric.rbs
CHANGED
@@ -1,176 +1,176 @@
|
|
1
1
|
# Numeric is the class from which all higher-level numeric classes should
|
2
2
|
# inherit.
|
3
|
-
#
|
3
|
+
#
|
4
4
|
# Numeric allows instantiation of heap-allocated objects. Other core numeric
|
5
5
|
# classes such as Integer are implemented as immediates, which means that each
|
6
6
|
# Integer is a single immutable object which is always passed by value.
|
7
|
-
#
|
7
|
+
#
|
8
8
|
# a = 1
|
9
9
|
# 1.object_id == a.object_id #=> true
|
10
|
-
#
|
10
|
+
#
|
11
11
|
# There can only ever be one instance of the integer `1`, for example. Ruby
|
12
12
|
# ensures this by preventing instantiation. If duplication is attempted, the
|
13
13
|
# same instance is returned.
|
14
|
-
#
|
14
|
+
#
|
15
15
|
# Integer.new(1) #=> NoMethodError: undefined method `new' for Integer:Class
|
16
16
|
# 1.dup #=> 1
|
17
17
|
# 1.object_id == 1.dup.object_id #=> true
|
18
|
-
#
|
18
|
+
#
|
19
19
|
# For this reason, Numeric should be used when defining other numeric classes.
|
20
|
-
#
|
20
|
+
#
|
21
21
|
# Classes which inherit from Numeric must implement `coerce`, which returns a
|
22
22
|
# two-member Array containing an object that has been coerced into an instance
|
23
23
|
# of the new class and `self` (see #coerce).
|
24
|
-
#
|
24
|
+
#
|
25
25
|
# Inheriting classes should also implement arithmetic operator methods (`+`,
|
26
26
|
# `-`, `*` and `/`) and the `<=>` operator (see Comparable). These methods may
|
27
27
|
# rely on `coerce` to ensure interoperability with instances of other numeric
|
28
28
|
# classes.
|
29
|
-
#
|
29
|
+
#
|
30
30
|
# class Tally < Numeric
|
31
31
|
# def initialize(string)
|
32
32
|
# @string = string
|
33
33
|
# end
|
34
|
-
#
|
34
|
+
#
|
35
35
|
# def to_s
|
36
36
|
# @string
|
37
37
|
# end
|
38
|
-
#
|
38
|
+
#
|
39
39
|
# def to_i
|
40
40
|
# @string.size
|
41
41
|
# end
|
42
|
-
#
|
42
|
+
#
|
43
43
|
# def coerce(other)
|
44
44
|
# [self.class.new('|' * other.to_i), self]
|
45
45
|
# end
|
46
|
-
#
|
46
|
+
#
|
47
47
|
# def <=>(other)
|
48
48
|
# to_i <=> other.to_i
|
49
49
|
# end
|
50
|
-
#
|
50
|
+
#
|
51
51
|
# def +(other)
|
52
52
|
# self.class.new('|' * (to_i + other.to_i))
|
53
53
|
# end
|
54
|
-
#
|
54
|
+
#
|
55
55
|
# def -(other)
|
56
56
|
# self.class.new('|' * (to_i - other.to_i))
|
57
57
|
# end
|
58
|
-
#
|
58
|
+
#
|
59
59
|
# def *(other)
|
60
60
|
# self.class.new('|' * (to_i * other.to_i))
|
61
61
|
# end
|
62
|
-
#
|
62
|
+
#
|
63
63
|
# def /(other)
|
64
64
|
# self.class.new('|' * (to_i / other.to_i))
|
65
65
|
# end
|
66
66
|
# end
|
67
|
-
#
|
67
|
+
#
|
68
68
|
# tally = Tally.new('||')
|
69
69
|
# puts tally * 2 #=> "||||"
|
70
70
|
# puts tally > 1 #=> true
|
71
|
-
#
|
71
|
+
#
|
72
72
|
class Numeric
|
73
73
|
include Comparable
|
74
74
|
|
75
75
|
public
|
76
76
|
|
77
77
|
# `x.modulo(y)` means `x-y*(x/y).floor`.
|
78
|
-
#
|
78
|
+
#
|
79
79
|
# Equivalent to `num.divmod(numeric)[1]`.
|
80
|
-
#
|
80
|
+
#
|
81
81
|
# See Numeric#divmod.
|
82
|
-
#
|
82
|
+
#
|
83
83
|
def %: (Numeric) -> Numeric
|
84
84
|
|
85
85
|
# Unary Plus---Returns the receiver.
|
86
|
-
#
|
86
|
+
#
|
87
87
|
def +@: () -> Numeric
|
88
88
|
|
89
89
|
# Unary Minus---Returns the receiver, negated.
|
90
|
-
#
|
90
|
+
#
|
91
91
|
def -@: () -> Numeric
|
92
92
|
|
93
93
|
# Returns zero if `number` equals `other`, otherwise returns `nil`.
|
94
|
-
#
|
94
|
+
#
|
95
95
|
def <=>: (Numeric other) -> Integer
|
96
96
|
|
97
97
|
# Returns the absolute value of `num`.
|
98
|
-
#
|
98
|
+
#
|
99
99
|
# 12.abs #=> 12
|
100
100
|
# (-34.56).abs #=> 34.56
|
101
101
|
# -34.56.abs #=> 34.56
|
102
|
-
#
|
102
|
+
#
|
103
103
|
# Numeric#magnitude is an alias for Numeric#abs.
|
104
|
-
#
|
104
|
+
#
|
105
105
|
def abs: () -> Numeric
|
106
106
|
|
107
107
|
# Returns square of self.
|
108
|
-
#
|
108
|
+
#
|
109
109
|
def abs2: () -> Numeric
|
110
110
|
|
111
111
|
# Returns 0 if the value is positive, pi otherwise.
|
112
|
-
#
|
112
|
+
#
|
113
113
|
def angle: () -> Numeric
|
114
114
|
|
115
115
|
# Returns 0 if the value is positive, pi otherwise.
|
116
|
-
#
|
116
|
+
#
|
117
117
|
alias arg angle
|
118
118
|
|
119
119
|
# Returns the smallest number greater than or equal to `num` with a precision of
|
120
120
|
# `ndigits` decimal digits (default: 0).
|
121
|
-
#
|
121
|
+
#
|
122
122
|
# Numeric implements this by converting its value to a Float and invoking
|
123
123
|
# Float#ceil.
|
124
|
-
#
|
124
|
+
#
|
125
125
|
def ceil: () -> Integer
|
126
126
|
| (Integer digits) -> (Integer | Numeric)
|
127
127
|
|
128
128
|
# If `numeric` is the same type as `num`, returns an array `[numeric, num]`.
|
129
129
|
# Otherwise, returns an array with both `numeric` and `num` represented as Float
|
130
130
|
# objects.
|
131
|
-
#
|
131
|
+
#
|
132
132
|
# This coercion mechanism is used by Ruby to handle mixed-type numeric
|
133
133
|
# operations: it is intended to find a compatible common type between the two
|
134
134
|
# operands of the operator.
|
135
|
-
#
|
135
|
+
#
|
136
136
|
# 1.coerce(2.5) #=> [2.5, 1.0]
|
137
137
|
# 1.2.coerce(3) #=> [3.0, 1.2]
|
138
138
|
# 1.coerce(2) #=> [2, 1]
|
139
|
-
#
|
139
|
+
#
|
140
140
|
def coerce: (Numeric) -> [ Numeric, Numeric ]
|
141
141
|
|
142
142
|
# Returns self.
|
143
|
-
#
|
143
|
+
#
|
144
144
|
def conj: () -> Numeric
|
145
145
|
|
146
146
|
# Returns self.
|
147
|
-
#
|
147
|
+
#
|
148
148
|
def conjugate: () -> Numeric
|
149
149
|
|
150
150
|
# Returns the denominator (always positive).
|
151
|
-
#
|
151
|
+
#
|
152
152
|
def denominator: () -> Integer
|
153
153
|
|
154
154
|
# Uses `/` to perform division, then converts the result to an integer. Numeric
|
155
155
|
# does not define the `/` operator; this is left to subclasses.
|
156
|
-
#
|
156
|
+
#
|
157
157
|
# Equivalent to `num.divmod(numeric)[0]`.
|
158
|
-
#
|
158
|
+
#
|
159
159
|
# See Numeric#divmod.
|
160
|
-
#
|
160
|
+
#
|
161
161
|
def div: (Numeric) -> Integer
|
162
162
|
|
163
163
|
# Returns an array containing the quotient and modulus obtained by dividing
|
164
164
|
# `num` by `numeric`.
|
165
|
-
#
|
165
|
+
#
|
166
166
|
# If `q, r = x.divmod(y)`, then
|
167
|
-
#
|
167
|
+
#
|
168
168
|
# q = floor(x/y)
|
169
169
|
# x = q*y + r
|
170
|
-
#
|
170
|
+
#
|
171
171
|
# The quotient is rounded toward negative infinity, as shown in the following
|
172
172
|
# table:
|
173
|
-
#
|
173
|
+
#
|
174
174
|
# a | b | a.divmod(b) | a/b | a.modulo(b) | a.remainder(b)
|
175
175
|
# ------+-----+---------------+---------+-------------+---------------
|
176
176
|
# 13 | 4 | 3, 1 | 3 | 1 | 1
|
@@ -188,222 +188,222 @@ class Numeric
|
|
188
188
|
# -11.5 | 4 | -3, 0.5 | -2.875 | 0.5 | -3.5
|
189
189
|
# ------+-----+---------------+---------+-------------+---------------
|
190
190
|
# -11.5 | -4 | 2, -3.5 | 2.875 | -3.5 | -3.5
|
191
|
-
#
|
191
|
+
#
|
192
192
|
# Examples
|
193
|
-
#
|
193
|
+
#
|
194
194
|
# 11.divmod(3) #=> [3, 2]
|
195
195
|
# 11.divmod(-3) #=> [-4, -1]
|
196
196
|
# 11.divmod(3.5) #=> [3, 0.5]
|
197
197
|
# (-11).divmod(3.5) #=> [-4, 3.0]
|
198
198
|
# 11.5.divmod(3.5) #=> [3, 1.0]
|
199
|
-
#
|
199
|
+
#
|
200
200
|
def divmod: (Numeric) -> [ Numeric, Numeric ]
|
201
201
|
|
202
202
|
# Returns `true` if `num` and `numeric` are the same type and have equal values.
|
203
203
|
# Contrast this with Numeric#==, which performs type conversions.
|
204
|
-
#
|
204
|
+
#
|
205
205
|
# 1 == 1.0 #=> true
|
206
206
|
# 1.eql?(1.0) #=> false
|
207
207
|
# 1.0.eql?(1.0) #=> true
|
208
|
-
#
|
208
|
+
#
|
209
209
|
def eql?: (untyped) -> bool
|
210
210
|
|
211
211
|
# Returns float division.
|
212
|
-
#
|
212
|
+
#
|
213
213
|
def fdiv: (Numeric) -> Numeric
|
214
214
|
|
215
215
|
# Returns `true` if `num` is a finite number, otherwise returns `false`.
|
216
|
-
#
|
216
|
+
#
|
217
217
|
def finite?: () -> bool
|
218
218
|
|
219
219
|
# Returns the largest number less than or equal to `num` with a precision of
|
220
220
|
# `ndigits` decimal digits (default: 0).
|
221
|
-
#
|
221
|
+
#
|
222
222
|
# Numeric implements this by converting its value to a Float and invoking
|
223
223
|
# Float#floor.
|
224
|
-
#
|
224
|
+
#
|
225
225
|
def floor: () -> Integer
|
226
226
|
| (Integer digits) -> Numeric
|
227
227
|
|
228
228
|
# Returns the corresponding imaginary number. Not available for complex numbers.
|
229
|
-
#
|
229
|
+
#
|
230
230
|
# -42.i #=> (0-42i)
|
231
231
|
# 2.0.i #=> (0+2.0i)
|
232
|
-
#
|
232
|
+
#
|
233
233
|
def i: () -> Complex
|
234
234
|
|
235
235
|
# Returns zero.
|
236
|
-
#
|
236
|
+
#
|
237
237
|
def imag: () -> Numeric
|
238
238
|
|
239
239
|
# Returns zero.
|
240
|
-
#
|
240
|
+
#
|
241
241
|
def imaginary: () -> Numeric
|
242
242
|
|
243
243
|
# Returns `nil`, -1, or 1 depending on whether the value is finite, `-Infinity`,
|
244
244
|
# or `+Infinity`.
|
245
|
-
#
|
245
|
+
#
|
246
246
|
def infinite?: () -> Integer?
|
247
247
|
|
248
248
|
# Returns `true` if `num` is an Integer.
|
249
|
-
#
|
249
|
+
#
|
250
250
|
# 1.0.integer? #=> false
|
251
251
|
# 1.integer? #=> true
|
252
|
-
#
|
252
|
+
#
|
253
253
|
def integer?: () -> bool
|
254
254
|
|
255
255
|
# Returns the absolute value of `num`.
|
256
|
-
#
|
256
|
+
#
|
257
257
|
# 12.abs #=> 12
|
258
258
|
# (-34.56).abs #=> 34.56
|
259
259
|
# -34.56.abs #=> 34.56
|
260
|
-
#
|
260
|
+
#
|
261
261
|
# Numeric#magnitude is an alias for Numeric#abs.
|
262
|
-
#
|
262
|
+
#
|
263
263
|
alias magnitude abs
|
264
264
|
|
265
265
|
# `x.modulo(y)` means `x-y*(x/y).floor`.
|
266
|
-
#
|
266
|
+
#
|
267
267
|
# Equivalent to `num.divmod(numeric)[1]`.
|
268
|
-
#
|
268
|
+
#
|
269
269
|
# See Numeric#divmod.
|
270
|
-
#
|
270
|
+
#
|
271
271
|
def modulo: (Numeric) -> Numeric
|
272
272
|
|
273
273
|
# Returns `true` if `num` is less than 0.
|
274
|
-
#
|
274
|
+
#
|
275
275
|
def negative?: () -> bool
|
276
276
|
|
277
277
|
# Returns `self` if `num` is not zero, `nil` otherwise.
|
278
|
-
#
|
278
|
+
#
|
279
279
|
# This behavior is useful when chaining comparisons:
|
280
|
-
#
|
280
|
+
#
|
281
281
|
# a = %w( z Bb bB bb BB a aA Aa AA A )
|
282
282
|
# b = a.sort {|a,b| (a.downcase <=> b.downcase).nonzero? || a <=> b }
|
283
283
|
# b #=> ["A", "a", "AA", "Aa", "aA", "BB", "Bb", "bB", "bb", "z"]
|
284
|
-
#
|
284
|
+
#
|
285
285
|
def nonzero?: () -> self?
|
286
286
|
|
287
287
|
# Returns the numerator.
|
288
|
-
#
|
288
|
+
#
|
289
289
|
def numerator: () -> Numeric
|
290
290
|
|
291
291
|
# Returns 0 if the value is positive, pi otherwise.
|
292
|
-
#
|
292
|
+
#
|
293
293
|
alias phase angle
|
294
294
|
|
295
295
|
# Returns an array; [num.abs, num.arg].
|
296
|
-
#
|
296
|
+
#
|
297
297
|
def polar: () -> [ Numeric, Numeric ]
|
298
298
|
|
299
299
|
# Returns `true` if `num` is greater than 0.
|
300
|
-
#
|
300
|
+
#
|
301
301
|
def positive?: () -> bool
|
302
302
|
|
303
303
|
# Returns the most exact division (rational for integers, float for floats).
|
304
|
-
#
|
304
|
+
#
|
305
305
|
def quo: (Numeric) -> Numeric
|
306
306
|
|
307
307
|
# Returns self.
|
308
|
-
#
|
308
|
+
#
|
309
309
|
def real: () -> Numeric
|
310
310
|
|
311
311
|
# Returns `true` if `num` is a real number (i.e. not Complex).
|
312
|
-
#
|
312
|
+
#
|
313
313
|
def real?: () -> bool
|
314
314
|
|
315
315
|
# Returns an array; [num, 0].
|
316
|
-
#
|
316
|
+
#
|
317
317
|
def rect: () -> [ Numeric, Numeric ]
|
318
318
|
|
319
319
|
# Returns an array; [num, 0].
|
320
|
-
#
|
320
|
+
#
|
321
321
|
alias rectangular rect
|
322
322
|
|
323
323
|
# `x.remainder(y)` means `x-y*(x/y).truncate`.
|
324
|
-
#
|
324
|
+
#
|
325
325
|
# See Numeric#divmod.
|
326
|
-
#
|
326
|
+
#
|
327
327
|
def remainder: (Numeric) -> Numeric
|
328
328
|
|
329
329
|
# Returns `num` rounded to the nearest value with a precision of `ndigits`
|
330
330
|
# decimal digits (default: 0).
|
331
|
-
#
|
331
|
+
#
|
332
332
|
# Numeric implements this by converting its value to a Float and invoking
|
333
333
|
# Float#round.
|
334
|
-
#
|
334
|
+
#
|
335
335
|
def round: () -> Integer
|
336
336
|
| (Integer digits) -> Numeric
|
337
337
|
|
338
338
|
# Invokes the given block with the sequence of numbers starting at `num`,
|
339
339
|
# incremented by `step` (defaulted to `1`) on each call.
|
340
|
-
#
|
340
|
+
#
|
341
341
|
# The loop finishes when the value to be passed to the block is greater than
|
342
342
|
# `limit` (if `step` is positive) or less than `limit` (if `step` is negative),
|
343
343
|
# where `limit` is defaulted to infinity.
|
344
|
-
#
|
344
|
+
#
|
345
345
|
# In the recommended keyword argument style, either or both of `step` and
|
346
346
|
# `limit` (default infinity) can be omitted. In the fixed position argument
|
347
347
|
# style, zero as a step (i.e. `num.step(limit, 0)`) is not allowed for
|
348
348
|
# historical compatibility reasons.
|
349
|
-
#
|
349
|
+
#
|
350
350
|
# If all the arguments are integers, the loop operates using an integer counter.
|
351
|
-
#
|
351
|
+
#
|
352
352
|
# If any of the arguments are floating point numbers, all are converted to
|
353
353
|
# floats, and the loop is executed *floor(n + n*Float::EPSILON) + 1* times,
|
354
354
|
# where *n = (limit - num)/step*.
|
355
|
-
#
|
355
|
+
#
|
356
356
|
# Otherwise, the loop starts at `num`, uses either the less-than (`<`) or
|
357
357
|
# greater-than (`>`) operator to compare the counter against `limit`, and
|
358
358
|
# increments itself using the `+` operator.
|
359
|
-
#
|
359
|
+
#
|
360
360
|
# If no block is given, an Enumerator is returned instead. Especially, the
|
361
361
|
# enumerator is an Enumerator::ArithmeticSequence if both `limit` and `step` are
|
362
362
|
# kind of Numeric or `nil`.
|
363
|
-
#
|
363
|
+
#
|
364
364
|
# For example:
|
365
|
-
#
|
365
|
+
#
|
366
366
|
# p 1.step.take(4)
|
367
367
|
# p 10.step(by: -1).take(4)
|
368
368
|
# 3.step(to: 5) {|i| print i, " " }
|
369
369
|
# 1.step(10, 2) {|i| print i, " " }
|
370
370
|
# Math::E.step(to: Math::PI, by: 0.2) {|f| print f, " " }
|
371
|
-
#
|
371
|
+
#
|
372
372
|
# Will produce:
|
373
|
-
#
|
373
|
+
#
|
374
374
|
# [1, 2, 3, 4]
|
375
375
|
# [10, 9, 8, 7]
|
376
376
|
# 3 4 5
|
377
377
|
# 1 3 5 7 9
|
378
378
|
# 2.718281828459045 2.9182818284590453 3.118281828459045
|
379
|
-
#
|
379
|
+
#
|
380
380
|
def step: (?Numeric limit, ?Numeric step) { (Numeric) -> void } -> self
|
381
381
|
| (?Numeric limit, ?Numeric step) -> Enumerator[Numeric, self]
|
382
382
|
| (?by: Numeric, ?to: Numeric) { (Numeric) -> void } -> self
|
383
383
|
| (?by: Numeric, ?to: Numeric) -> Enumerator[Numeric, self]
|
384
384
|
|
385
385
|
# Returns the value as a complex.
|
386
|
-
#
|
386
|
+
#
|
387
387
|
def to_c: () -> Complex
|
388
388
|
|
389
389
|
# Invokes the child class's `to_i` method to convert `num` to an integer.
|
390
|
-
#
|
390
|
+
#
|
391
391
|
# 1.0.class #=> Float
|
392
392
|
# 1.0.to_int.class #=> Integer
|
393
393
|
# 1.0.to_i.class #=> Integer
|
394
|
-
#
|
394
|
+
#
|
395
395
|
def to_int: () -> Integer
|
396
396
|
|
397
397
|
# Returns `num` truncated (toward zero) to a precision of `ndigits` decimal
|
398
398
|
# digits (default: 0).
|
399
|
-
#
|
399
|
+
#
|
400
400
|
# Numeric implements this by converting its value to a Float and invoking
|
401
401
|
# Float#truncate.
|
402
|
-
#
|
402
|
+
#
|
403
403
|
def truncate: () -> Integer
|
404
404
|
| (Integer ndigits) -> (Integer | Numeric)
|
405
405
|
|
406
406
|
# Returns `true` if `num` has a zero value.
|
407
|
-
#
|
407
|
+
#
|
408
408
|
def zero?: () -> bool
|
409
409
|
end
|