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