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.
- checksums.yaml +7 -0
- data/.github/workflows/ruby.yml +28 -0
- data/.gitignore +12 -0
- data/.rubocop.yml +15 -0
- data/BSDL +22 -0
- data/CHANGELOG.md +9 -0
- data/COPYING +56 -0
- data/Gemfile +6 -0
- data/README.md +93 -0
- data/Rakefile +142 -0
- data/bin/annotate-with-rdoc +157 -0
- data/bin/console +14 -0
- data/bin/query-rdoc +103 -0
- data/bin/setup +10 -0
- data/bin/sort +89 -0
- data/bin/test_runner.rb +16 -0
- data/docs/CONTRIBUTING.md +97 -0
- data/docs/sigs.md +148 -0
- data/docs/stdlib.md +152 -0
- data/docs/syntax.md +528 -0
- data/exe/rbs +7 -0
- data/lib/rbs.rb +64 -0
- data/lib/rbs/ast/annotation.rb +27 -0
- data/lib/rbs/ast/comment.rb +27 -0
- data/lib/rbs/ast/declarations.rb +395 -0
- data/lib/rbs/ast/members.rb +362 -0
- data/lib/rbs/buffer.rb +50 -0
- data/lib/rbs/builtin_names.rb +55 -0
- data/lib/rbs/cli.rb +558 -0
- data/lib/rbs/constant.rb +26 -0
- data/lib/rbs/constant_table.rb +150 -0
- data/lib/rbs/definition.rb +170 -0
- data/lib/rbs/definition_builder.rb +919 -0
- data/lib/rbs/environment.rb +281 -0
- data/lib/rbs/environment_loader.rb +136 -0
- data/lib/rbs/environment_walker.rb +124 -0
- data/lib/rbs/errors.rb +187 -0
- data/lib/rbs/location.rb +102 -0
- data/lib/rbs/method_type.rb +123 -0
- data/lib/rbs/namespace.rb +91 -0
- data/lib/rbs/parser.y +1344 -0
- data/lib/rbs/prototype/rb.rb +553 -0
- data/lib/rbs/prototype/rbi.rb +587 -0
- data/lib/rbs/prototype/runtime.rb +381 -0
- data/lib/rbs/substitution.rb +46 -0
- data/lib/rbs/test.rb +26 -0
- data/lib/rbs/test/errors.rb +61 -0
- data/lib/rbs/test/hook.rb +294 -0
- data/lib/rbs/test/setup.rb +58 -0
- data/lib/rbs/test/spy.rb +325 -0
- data/lib/rbs/test/test_helper.rb +183 -0
- data/lib/rbs/test/type_check.rb +254 -0
- data/lib/rbs/type_name.rb +70 -0
- data/lib/rbs/types.rb +936 -0
- data/lib/rbs/variance_calculator.rb +138 -0
- data/lib/rbs/vendorer.rb +47 -0
- data/lib/rbs/version.rb +3 -0
- data/lib/rbs/writer.rb +269 -0
- data/lib/ruby/signature.rb +7 -0
- data/rbs.gemspec +46 -0
- data/stdlib/abbrev/abbrev.rbs +60 -0
- data/stdlib/base64/base64.rbs +71 -0
- data/stdlib/benchmark/benchmark.rbs +372 -0
- data/stdlib/builtin/array.rbs +1997 -0
- data/stdlib/builtin/basic_object.rbs +280 -0
- data/stdlib/builtin/binding.rbs +177 -0
- data/stdlib/builtin/builtin.rbs +45 -0
- data/stdlib/builtin/class.rbs +145 -0
- data/stdlib/builtin/comparable.rbs +116 -0
- data/stdlib/builtin/complex.rbs +400 -0
- data/stdlib/builtin/constants.rbs +37 -0
- data/stdlib/builtin/data.rbs +5 -0
- data/stdlib/builtin/deprecated.rbs +2 -0
- data/stdlib/builtin/dir.rbs +413 -0
- data/stdlib/builtin/encoding.rbs +607 -0
- data/stdlib/builtin/enumerable.rbs +404 -0
- data/stdlib/builtin/enumerator.rbs +260 -0
- data/stdlib/builtin/errno.rbs +781 -0
- data/stdlib/builtin/errors.rbs +582 -0
- data/stdlib/builtin/exception.rbs +194 -0
- data/stdlib/builtin/false_class.rbs +40 -0
- data/stdlib/builtin/fiber.rbs +68 -0
- data/stdlib/builtin/fiber_error.rbs +12 -0
- data/stdlib/builtin/file.rbs +1076 -0
- data/stdlib/builtin/file_test.rbs +59 -0
- data/stdlib/builtin/float.rbs +696 -0
- data/stdlib/builtin/gc.rbs +243 -0
- data/stdlib/builtin/hash.rbs +1029 -0
- data/stdlib/builtin/integer.rbs +707 -0
- data/stdlib/builtin/io.rbs +683 -0
- data/stdlib/builtin/kernel.rbs +576 -0
- data/stdlib/builtin/marshal.rbs +161 -0
- data/stdlib/builtin/match_data.rbs +271 -0
- data/stdlib/builtin/math.rbs +369 -0
- data/stdlib/builtin/method.rbs +185 -0
- data/stdlib/builtin/module.rbs +1104 -0
- data/stdlib/builtin/nil_class.rbs +82 -0
- data/stdlib/builtin/numeric.rbs +409 -0
- data/stdlib/builtin/object.rbs +824 -0
- data/stdlib/builtin/proc.rbs +429 -0
- data/stdlib/builtin/process.rbs +1227 -0
- data/stdlib/builtin/random.rbs +267 -0
- data/stdlib/builtin/range.rbs +226 -0
- data/stdlib/builtin/rational.rbs +424 -0
- data/stdlib/builtin/rb_config.rbs +57 -0
- data/stdlib/builtin/regexp.rbs +1083 -0
- data/stdlib/builtin/ruby_vm.rbs +14 -0
- data/stdlib/builtin/signal.rbs +55 -0
- data/stdlib/builtin/string.rbs +1901 -0
- data/stdlib/builtin/string_io.rbs +284 -0
- data/stdlib/builtin/struct.rbs +40 -0
- data/stdlib/builtin/symbol.rbs +228 -0
- data/stdlib/builtin/thread.rbs +1108 -0
- data/stdlib/builtin/thread_group.rbs +23 -0
- data/stdlib/builtin/time.rbs +1047 -0
- data/stdlib/builtin/trace_point.rbs +290 -0
- data/stdlib/builtin/true_class.rbs +46 -0
- data/stdlib/builtin/unbound_method.rbs +153 -0
- data/stdlib/builtin/warning.rbs +17 -0
- data/stdlib/coverage/coverage.rbs +62 -0
- data/stdlib/csv/csv.rbs +773 -0
- data/stdlib/erb/erb.rbs +392 -0
- data/stdlib/find/find.rbs +40 -0
- data/stdlib/ipaddr/ipaddr.rbs +247 -0
- data/stdlib/json/json.rbs +335 -0
- data/stdlib/pathname/pathname.rbs +1093 -0
- data/stdlib/prime/integer-extension.rbs +23 -0
- data/stdlib/prime/prime.rbs +188 -0
- data/stdlib/securerandom/securerandom.rbs +9 -0
- data/stdlib/set/set.rbs +301 -0
- data/stdlib/tmpdir/tmpdir.rbs +53 -0
- 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
|