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
data/stdlib/builtin/object.rbs
CHANGED
@@ -1,68 +1,68 @@
|
|
1
1
|
# Object is the default root of all Ruby objects. Object inherits from
|
2
2
|
# BasicObject which allows creating alternate object hierarchies. Methods on
|
3
3
|
# Object are available to all classes unless explicitly overridden.
|
4
|
-
#
|
4
|
+
#
|
5
5
|
# Object mixes in the Kernel module, making the built-in kernel functions
|
6
6
|
# globally accessible. Although the instance methods of Object are defined by
|
7
7
|
# the Kernel module, we have chosen to document them here for clarity.
|
8
|
-
#
|
8
|
+
#
|
9
9
|
# When referencing constants in classes inheriting from Object you do not need
|
10
10
|
# to use the full namespace. For example, referencing `File` inside `YourClass`
|
11
11
|
# will find the top-level File class.
|
12
|
-
#
|
12
|
+
#
|
13
13
|
# In the descriptions of Object's methods, the parameter *symbol* refers to a
|
14
14
|
# symbol, which is either a quoted string or a Symbol (such as `:name`).
|
15
|
-
#
|
15
|
+
#
|
16
16
|
class Object < BasicObject
|
17
17
|
include Kernel
|
18
18
|
|
19
19
|
# Returns true if two objects do not match (using the *=~* method), otherwise
|
20
20
|
# false.
|
21
|
-
#
|
21
|
+
#
|
22
22
|
def !~: (untyped) -> bool
|
23
23
|
|
24
24
|
# Returns 0 if `obj` and `other` are the same object or `obj == other`,
|
25
25
|
# otherwise nil.
|
26
|
-
#
|
26
|
+
#
|
27
27
|
# The `<=>` is used by various methods to compare objects, for example
|
28
28
|
# Enumerable#sort, Enumerable#max etc.
|
29
|
-
#
|
29
|
+
#
|
30
30
|
# Your implementation of `<=>` should return one of the following values: -1, 0,
|
31
31
|
# 1 or nil. -1 means self is smaller than other. 0 means self is equal to other.
|
32
32
|
# 1 means self is bigger than other. Nil means the two values could not be
|
33
33
|
# compared.
|
34
|
-
#
|
34
|
+
#
|
35
35
|
# When you define `<=>`, you can include Comparable to gain the methods `<=`,
|
36
36
|
# `<`, `==`, `>=`, `>` and `between?`.
|
37
|
-
#
|
37
|
+
#
|
38
38
|
def <=>: (untyped) -> Integer?
|
39
39
|
|
40
40
|
# Case Equality -- For class Object, effectively the same as calling `#==`, but
|
41
41
|
# typically overridden by descendants to provide meaningful semantics in `case`
|
42
42
|
# statements.
|
43
|
-
#
|
43
|
+
#
|
44
44
|
def ===: (untyped) -> bool
|
45
45
|
|
46
46
|
# This method is deprecated.
|
47
|
-
#
|
47
|
+
#
|
48
48
|
# This is not only unuseful but also troublesome because it may hide a type
|
49
49
|
# error.
|
50
|
-
#
|
50
|
+
#
|
51
51
|
def =~: (untyped) -> bool
|
52
52
|
|
53
53
|
# Returns the class of *obj*. This method must always be called with an explicit
|
54
54
|
# receiver, as `class` is also a reserved word in Ruby.
|
55
|
-
#
|
55
|
+
#
|
56
56
|
# 1.class #=> Integer
|
57
57
|
# self.class #=> Object
|
58
|
-
#
|
58
|
+
#
|
59
59
|
def `class`: () -> untyped
|
60
60
|
|
61
61
|
# Produces a shallow copy of *obj*---the instance variables of *obj* are copied,
|
62
62
|
# but not the objects they reference. `clone` copies the frozen (unless :freeze
|
63
63
|
# keyword argument is given with a false value) and tainted state of *obj*. See
|
64
64
|
# also the discussion under `Object#dup`.
|
65
|
-
#
|
65
|
+
#
|
66
66
|
# class Klass
|
67
67
|
# attr_accessor :str
|
68
68
|
# end
|
@@ -72,16 +72,16 @@ class Object < BasicObject
|
|
72
72
|
# s2.str[1,4] = "i" #=> "i"
|
73
73
|
# s1.inspect #=> "#<Klass:0x401b3a38 @str=\"Hi\">"
|
74
74
|
# s2.inspect #=> "#<Klass:0x401b3998 @str=\"Hi\">"
|
75
|
-
#
|
75
|
+
#
|
76
76
|
# This method may have class-specific behavior. If so, that behavior will be
|
77
77
|
# documented under the #`initialize_copy` method of the class.
|
78
|
-
#
|
78
|
+
#
|
79
79
|
def clone: (?freeze: bool) -> self
|
80
80
|
|
81
81
|
# Defines a singleton method in the receiver. The *method* parameter can be a
|
82
82
|
# `Proc`, a `Method` or an `UnboundMethod` object. If a block is specified, it
|
83
83
|
# is used as the method body.
|
84
|
-
#
|
84
|
+
#
|
85
85
|
# class A
|
86
86
|
# class << self
|
87
87
|
# def class_name
|
@@ -93,95 +93,95 @@ class Object < BasicObject
|
|
93
93
|
# "I am: #{class_name}"
|
94
94
|
# end
|
95
95
|
# A.who_am_i # ==> "I am: A"
|
96
|
-
#
|
96
|
+
#
|
97
97
|
# guy = "Bob"
|
98
98
|
# guy.define_singleton_method(:hello) { "#{self}: Hello there!" }
|
99
99
|
# guy.hello #=> "Bob: Hello there!"
|
100
|
-
#
|
100
|
+
#
|
101
101
|
def define_singleton_method: (Symbol, Method | UnboundMethod) -> Symbol
|
102
102
|
| (Symbol) { (*untyped) -> untyped } -> Symbol
|
103
103
|
|
104
104
|
# Prints *obj* on the given port (default `$>`). Equivalent to:
|
105
|
-
#
|
105
|
+
#
|
106
106
|
# def display(port=$>)
|
107
107
|
# port.write self
|
108
108
|
# nil
|
109
109
|
# end
|
110
|
-
#
|
110
|
+
#
|
111
111
|
# For example:
|
112
|
-
#
|
112
|
+
#
|
113
113
|
# 1.display
|
114
114
|
# "cat".display
|
115
115
|
# [ 4, 5, 6 ].display
|
116
116
|
# puts
|
117
|
-
#
|
117
|
+
#
|
118
118
|
# *produces:*
|
119
|
-
#
|
119
|
+
#
|
120
120
|
# 1cat[4, 5, 6]
|
121
|
-
#
|
121
|
+
#
|
122
122
|
def display: (?_Writeable port) -> void
|
123
123
|
|
124
124
|
# Produces a shallow copy of *obj*---the instance variables of *obj* are copied,
|
125
125
|
# but not the objects they reference. `dup` copies the tainted state of *obj*.
|
126
|
-
#
|
126
|
+
#
|
127
127
|
# This method may have class-specific behavior. If so, that behavior will be
|
128
128
|
# documented under the #`initialize_copy` method of the class.
|
129
|
-
#
|
129
|
+
#
|
130
130
|
# ### on dup vs clone
|
131
|
-
#
|
131
|
+
#
|
132
132
|
# In general, `clone` and `dup` may have different semantics in descendant
|
133
133
|
# classes. While `clone` is used to duplicate an object, including its internal
|
134
134
|
# state, `dup` typically uses the class of the descendant object to create the
|
135
135
|
# new instance.
|
136
|
-
#
|
136
|
+
#
|
137
137
|
# When using #dup, any modules that the object has been extended with will not
|
138
138
|
# be copied.
|
139
|
-
#
|
139
|
+
#
|
140
140
|
# class Klass
|
141
141
|
# attr_accessor :str
|
142
142
|
# end
|
143
|
-
#
|
143
|
+
#
|
144
144
|
# module Foo
|
145
145
|
# def foo; 'foo'; end
|
146
146
|
# end
|
147
|
-
#
|
147
|
+
#
|
148
148
|
# s1 = Klass.new #=> #<Klass:0x401b3a38>
|
149
149
|
# s1.extend(Foo) #=> #<Klass:0x401b3a38>
|
150
150
|
# s1.foo #=> "foo"
|
151
|
-
#
|
151
|
+
#
|
152
152
|
# s2 = s1.clone #=> #<Klass:0x401b3a38>
|
153
153
|
# s2.foo #=> "foo"
|
154
|
-
#
|
154
|
+
#
|
155
155
|
# s3 = s1.dup #=> #<Klass:0x401b3a38>
|
156
156
|
# s3.foo #=> NoMethodError: undefined method `foo' for #<Klass:0x401b3a38>
|
157
|
-
#
|
157
|
+
#
|
158
158
|
def dup: () -> self
|
159
159
|
|
160
160
|
# Creates a new Enumerator which will enumerate by calling `method` on `obj`,
|
161
161
|
# passing `args` if any.
|
162
|
-
#
|
162
|
+
#
|
163
163
|
# If a block is given, it will be used to calculate the size of the enumerator
|
164
164
|
# without the need to iterate it (see Enumerator#size).
|
165
|
-
#
|
165
|
+
#
|
166
166
|
# ### Examples
|
167
|
-
#
|
167
|
+
#
|
168
168
|
# str = "xyz"
|
169
|
-
#
|
169
|
+
#
|
170
170
|
# enum = str.enum_for(:each_byte)
|
171
171
|
# enum.each { |b| puts b }
|
172
172
|
# # => 120
|
173
173
|
# # => 121
|
174
174
|
# # => 122
|
175
|
-
#
|
175
|
+
#
|
176
176
|
# # protect an array from being modified by some_method
|
177
177
|
# a = [1, 2, 3]
|
178
178
|
# some_method(a.to_enum)
|
179
|
-
#
|
179
|
+
#
|
180
180
|
# It is typical to call to_enum when defining methods for a generic Enumerable,
|
181
181
|
# in case no block is passed.
|
182
|
-
#
|
182
|
+
#
|
183
183
|
# Here is such an example, with parameter passing and a sizing block:
|
184
|
-
#
|
184
|
+
#
|
185
185
|
# module Enumerable
|
186
186
|
# # a generic method to repeat the values of any enumerable
|
187
187
|
# def repeat(n)
|
@@ -197,42 +197,42 @@ class Object < BasicObject
|
|
197
197
|
# end
|
198
198
|
# end
|
199
199
|
# end
|
200
|
-
#
|
200
|
+
#
|
201
201
|
# %i[hello world].repeat(2) { |w| puts w }
|
202
202
|
# # => Prints 'hello', 'hello', 'world', 'world'
|
203
203
|
# enum = (1..14).repeat(3)
|
204
204
|
# # => returns an Enumerator when called without a block
|
205
205
|
# enum.first(4) # => [1, 1, 1, 2]
|
206
206
|
# enum.size # => 42
|
207
|
-
#
|
207
|
+
#
|
208
208
|
def enum_for: (Symbol method, *untyped args) ?{ (*untyped args) -> Integer } -> Enumerator[untyped, untyped]
|
209
209
|
| (*untyped args) ?{ (*untyped args) -> Integer } -> Enumerator[untyped, untyped]
|
210
210
|
|
211
211
|
# Creates a new Enumerator which will enumerate by calling `method` on `obj`,
|
212
212
|
# passing `args` if any.
|
213
|
-
#
|
213
|
+
#
|
214
214
|
# If a block is given, it will be used to calculate the size of the enumerator
|
215
215
|
# without the need to iterate it (see Enumerator#size).
|
216
|
-
#
|
216
|
+
#
|
217
217
|
# ### Examples
|
218
|
-
#
|
218
|
+
#
|
219
219
|
# str = "xyz"
|
220
|
-
#
|
220
|
+
#
|
221
221
|
# enum = str.enum_for(:each_byte)
|
222
222
|
# enum.each { |b| puts b }
|
223
223
|
# # => 120
|
224
224
|
# # => 121
|
225
225
|
# # => 122
|
226
|
-
#
|
226
|
+
#
|
227
227
|
# # protect an array from being modified by some_method
|
228
228
|
# a = [1, 2, 3]
|
229
229
|
# some_method(a.to_enum)
|
230
|
-
#
|
230
|
+
#
|
231
231
|
# It is typical to call to_enum when defining methods for a generic Enumerable,
|
232
232
|
# in case no block is passed.
|
233
|
-
#
|
233
|
+
#
|
234
234
|
# Here is such an example, with parameter passing and a sizing block:
|
235
|
-
#
|
235
|
+
#
|
236
236
|
# module Enumerable
|
237
237
|
# # a generic method to repeat the values of any enumerable
|
238
238
|
# def repeat(n)
|
@@ -248,89 +248,89 @@ class Object < BasicObject
|
|
248
248
|
# end
|
249
249
|
# end
|
250
250
|
# end
|
251
|
-
#
|
251
|
+
#
|
252
252
|
# %i[hello world].repeat(2) { |w| puts w }
|
253
253
|
# # => Prints 'hello', 'hello', 'world', 'world'
|
254
254
|
# enum = (1..14).repeat(3)
|
255
255
|
# # => returns an Enumerator when called without a block
|
256
256
|
# enum.first(4) # => [1, 1, 1, 2]
|
257
257
|
# enum.size # => 42
|
258
|
-
#
|
258
|
+
#
|
259
259
|
alias to_enum enum_for
|
260
260
|
|
261
261
|
# Equality --- At the `Object` level, `==` returns `true` only if `obj` and
|
262
262
|
# `other` are the same object. Typically, this method is overridden in
|
263
263
|
# descendant classes to provide class-specific meaning.
|
264
|
-
#
|
264
|
+
#
|
265
265
|
# Unlike `==`, the `equal?` method should never be overridden by subclasses as
|
266
266
|
# it is used to determine object identity (that is, `a.equal?(b)` if and only if
|
267
267
|
# `a` is the same object as `b`):
|
268
|
-
#
|
268
|
+
#
|
269
269
|
# obj = "a"
|
270
270
|
# other = obj.dup
|
271
|
-
#
|
271
|
+
#
|
272
272
|
# obj == other #=> true
|
273
273
|
# obj.equal? other #=> false
|
274
274
|
# obj.equal? obj #=> true
|
275
|
-
#
|
275
|
+
#
|
276
276
|
# The `eql?` method returns `true` if `obj` and `other` refer to the same hash
|
277
277
|
# key. This is used by Hash to test members for equality. For objects of class
|
278
278
|
# `Object`, `eql?` is synonymous with `==`. Subclasses normally continue this
|
279
279
|
# tradition by aliasing `eql?` to their overridden `==` method, but there are
|
280
280
|
# exceptions. `Numeric` types, for example, perform type conversion across
|
281
281
|
# `==`, but not across `eql?`, so:
|
282
|
-
#
|
282
|
+
#
|
283
283
|
# 1 == 1.0 #=> true
|
284
284
|
# 1.eql? 1.0 #=> false
|
285
|
-
#
|
285
|
+
#
|
286
286
|
def eql?: (untyped) -> bool
|
287
287
|
|
288
288
|
# Adds to *obj* the instance methods from each module given as a parameter.
|
289
|
-
#
|
289
|
+
#
|
290
290
|
# module Mod
|
291
291
|
# def hello
|
292
292
|
# "Hello from Mod.\n"
|
293
293
|
# end
|
294
294
|
# end
|
295
|
-
#
|
295
|
+
#
|
296
296
|
# class Klass
|
297
297
|
# def hello
|
298
298
|
# "Hello from Klass.\n"
|
299
299
|
# end
|
300
300
|
# end
|
301
|
-
#
|
301
|
+
#
|
302
302
|
# k = Klass.new
|
303
303
|
# k.hello #=> "Hello from Klass.\n"
|
304
304
|
# k.extend(Mod) #=> #<Klass:0x401b3bc8>
|
305
305
|
# k.hello #=> "Hello from Mod.\n"
|
306
|
-
#
|
306
|
+
#
|
307
307
|
def `extend`: (*Module) -> self
|
308
308
|
|
309
309
|
# Prevents further modifications to *obj*. A `RuntimeError` will be raised if
|
310
310
|
# modification is attempted. There is no way to unfreeze a frozen object. See
|
311
311
|
# also `Object#frozen?`.
|
312
|
-
#
|
312
|
+
#
|
313
313
|
# This method returns self.
|
314
|
-
#
|
314
|
+
#
|
315
315
|
# a = [ "a", "b", "c" ]
|
316
316
|
# a.freeze
|
317
317
|
# a << "z"
|
318
|
-
#
|
318
|
+
#
|
319
319
|
# *produces:*
|
320
|
-
#
|
320
|
+
#
|
321
321
|
# prog.rb:3:in `<<': can't modify frozen Array (FrozenError)
|
322
322
|
# from prog.rb:3
|
323
|
-
#
|
323
|
+
#
|
324
324
|
# Objects of the following classes are always frozen: Integer, Float, Symbol.
|
325
|
-
#
|
325
|
+
#
|
326
326
|
def freeze: () -> self
|
327
327
|
|
328
328
|
# Returns the freeze status of *obj*.
|
329
|
-
#
|
329
|
+
#
|
330
330
|
# a = [ "a", "b", "c" ]
|
331
331
|
# a.freeze #=> ["a", "b", "c"]
|
332
332
|
# a.frozen? #=> true
|
333
|
-
#
|
333
|
+
#
|
334
334
|
def frozen?: () -> bool
|
335
335
|
|
336
336
|
def hash: () -> Integer
|
@@ -341,40 +341,40 @@ class Object < BasicObject
|
|
341
341
|
# each of them). User defined classes should override this method to provide a
|
342
342
|
# better representation of *obj*. When overriding this method, it should return
|
343
343
|
# a string whose encoding is compatible with the default external encoding.
|
344
|
-
#
|
344
|
+
#
|
345
345
|
# [ 1, 2, 3..4, 'five' ].inspect #=> "[1, 2, 3..4, \"five\"]"
|
346
346
|
# Time.new.inspect #=> "2008-03-08 19:43:39 +0900"
|
347
|
-
#
|
347
|
+
#
|
348
348
|
# class Foo
|
349
349
|
# end
|
350
350
|
# Foo.new.inspect #=> "#<Foo:0x0300c868>"
|
351
|
-
#
|
351
|
+
#
|
352
352
|
# class Bar
|
353
353
|
# def initialize
|
354
354
|
# @bar = 1
|
355
355
|
# end
|
356
356
|
# end
|
357
357
|
# Bar.new.inspect #=> "#<Bar:0x0300c868 @bar=1>"
|
358
|
-
#
|
358
|
+
#
|
359
359
|
def inspect: () -> String
|
360
360
|
|
361
361
|
# Returns `true` if *obj* is an instance of the given class. See also
|
362
362
|
# `Object#kind_of?`.
|
363
|
-
#
|
363
|
+
#
|
364
364
|
# class A; end
|
365
365
|
# class B < A; end
|
366
366
|
# class C < B; end
|
367
|
-
#
|
367
|
+
#
|
368
368
|
# b = B.new
|
369
369
|
# b.instance_of? A #=> false
|
370
370
|
# b.instance_of? B #=> true
|
371
371
|
# b.instance_of? C #=> false
|
372
|
-
#
|
372
|
+
#
|
373
373
|
def instance_of?: (Module) -> bool
|
374
374
|
|
375
375
|
# Returns `true` if the given instance variable is defined in *obj*. String
|
376
376
|
# arguments are converted to symbols.
|
377
|
-
#
|
377
|
+
#
|
378
378
|
# class Fred
|
379
379
|
# def initialize(p1, p2)
|
380
380
|
# @a, @b = p1, p2
|
@@ -384,7 +384,7 @@ class Object < BasicObject
|
|
384
384
|
# fred.instance_variable_defined?(:@a) #=> true
|
385
385
|
# fred.instance_variable_defined?("@b") #=> true
|
386
386
|
# fred.instance_variable_defined?("@c") #=> false
|
387
|
-
#
|
387
|
+
#
|
388
388
|
def instance_variable_defined?: (String | Symbol var) -> bool
|
389
389
|
|
390
390
|
# Returns the value of the given instance variable, or nil if the instance
|
@@ -392,7 +392,7 @@ class Object < BasicObject
|
|
392
392
|
# regular instance variables. Throws a `NameError` exception if the supplied
|
393
393
|
# symbol is not valid as an instance variable name. String arguments are
|
394
394
|
# converted to symbols.
|
395
|
-
#
|
395
|
+
#
|
396
396
|
# class Fred
|
397
397
|
# def initialize(p1, p2)
|
398
398
|
# @a, @b = p1, p2
|
@@ -401,7 +401,7 @@ class Object < BasicObject
|
|
401
401
|
# fred = Fred.new('cat', 99)
|
402
402
|
# fred.instance_variable_get(:@a) #=> "cat"
|
403
403
|
# fred.instance_variable_get("@b") #=> 99
|
404
|
-
#
|
404
|
+
#
|
405
405
|
def instance_variable_get: (String | Symbol var) -> untyped
|
406
406
|
|
407
407
|
# Sets the instance variable named by *symbol* to the given object, thereby
|
@@ -409,7 +409,7 @@ class Object < BasicObject
|
|
409
409
|
# encapsulation. The variable does not have to exist prior to this call. If the
|
410
410
|
# instance variable name is passed as a string, that string is converted to a
|
411
411
|
# symbol.
|
412
|
-
#
|
412
|
+
#
|
413
413
|
# class Fred
|
414
414
|
# def initialize(p1, p2)
|
415
415
|
# @a, @b = p1, p2
|
@@ -419,12 +419,12 @@ class Object < BasicObject
|
|
419
419
|
# fred.instance_variable_set(:@a, 'dog') #=> "dog"
|
420
420
|
# fred.instance_variable_set(:@c, 'cat') #=> "cat"
|
421
421
|
# fred.inspect #=> "#<Fred:0x401b3da8 @a=\"dog\", @b=99, @c=\"cat\">"
|
422
|
-
#
|
422
|
+
#
|
423
423
|
def instance_variable_set: [X] (String | Symbol var, X value) -> X
|
424
424
|
|
425
425
|
# Returns an array of instance variable names for the receiver. Note that simply
|
426
426
|
# defining an accessor does not create the corresponding instance variable.
|
427
|
-
#
|
427
|
+
#
|
428
428
|
# class Fred
|
429
429
|
# attr_accessor :a1
|
430
430
|
# def initialize
|
@@ -432,67 +432,67 @@ class Object < BasicObject
|
|
432
432
|
# end
|
433
433
|
# end
|
434
434
|
# Fred.new.instance_variables #=> [:@iv]
|
435
|
-
#
|
435
|
+
#
|
436
436
|
def instance_variables: () -> Array[Symbol]
|
437
437
|
|
438
438
|
# Returns `true` if *class* is the class of *obj*, or if *class* is one of the
|
439
439
|
# superclasses of *obj* or modules included in *obj*.
|
440
|
-
#
|
440
|
+
#
|
441
441
|
# module M; end
|
442
442
|
# class A
|
443
443
|
# include M
|
444
444
|
# end
|
445
445
|
# class B < A; end
|
446
446
|
# class C < B; end
|
447
|
-
#
|
447
|
+
#
|
448
448
|
# b = B.new
|
449
449
|
# b.is_a? A #=> true
|
450
450
|
# b.is_a? B #=> true
|
451
451
|
# b.is_a? C #=> false
|
452
452
|
# b.is_a? M #=> true
|
453
|
-
#
|
453
|
+
#
|
454
454
|
# b.kind_of? A #=> true
|
455
455
|
# b.kind_of? B #=> true
|
456
456
|
# b.kind_of? C #=> false
|
457
457
|
# b.kind_of? M #=> true
|
458
|
-
#
|
458
|
+
#
|
459
459
|
def is_a?: (Module) -> bool
|
460
460
|
|
461
461
|
# Returns `true` if *class* is the class of *obj*, or if *class* is one of the
|
462
462
|
# superclasses of *obj* or modules included in *obj*.
|
463
|
-
#
|
463
|
+
#
|
464
464
|
# module M; end
|
465
465
|
# class A
|
466
466
|
# include M
|
467
467
|
# end
|
468
468
|
# class B < A; end
|
469
469
|
# class C < B; end
|
470
|
-
#
|
470
|
+
#
|
471
471
|
# b = B.new
|
472
472
|
# b.is_a? A #=> true
|
473
473
|
# b.is_a? B #=> true
|
474
474
|
# b.is_a? C #=> false
|
475
475
|
# b.is_a? M #=> true
|
476
|
-
#
|
476
|
+
#
|
477
477
|
# b.kind_of? A #=> true
|
478
478
|
# b.kind_of? B #=> true
|
479
479
|
# b.kind_of? C #=> false
|
480
480
|
# b.kind_of? M #=> true
|
481
|
-
#
|
481
|
+
#
|
482
482
|
alias kind_of? is_a?
|
483
483
|
|
484
484
|
# Returns the receiver.
|
485
|
-
#
|
485
|
+
#
|
486
486
|
# string = "my string"
|
487
487
|
# string.itself.object_id == string.object_id #=> true
|
488
|
-
#
|
488
|
+
#
|
489
489
|
def `itself`: () -> self
|
490
490
|
|
491
491
|
# Looks up the named method as a receiver in *obj*, returning a `Method` object
|
492
492
|
# (or raising `NameError`). The `Method` object acts as a closure in *obj*'s
|
493
493
|
# object instance, so instance variables and the value of `self` remain
|
494
494
|
# available.
|
495
|
-
#
|
495
|
+
#
|
496
496
|
# class Demo
|
497
497
|
# def initialize(n)
|
498
498
|
# @iv = n
|
@@ -501,27 +501,27 @@ class Object < BasicObject
|
|
501
501
|
# "Hello, @iv = #{@iv}"
|
502
502
|
# end
|
503
503
|
# end
|
504
|
-
#
|
504
|
+
#
|
505
505
|
# k = Demo.new(99)
|
506
506
|
# m = k.method(:hello)
|
507
507
|
# m.call #=> "Hello, @iv = 99"
|
508
|
-
#
|
508
|
+
#
|
509
509
|
# l = Demo.new('Fred')
|
510
510
|
# m = l.method("hello")
|
511
511
|
# m.call #=> "Hello, @iv = Fred"
|
512
|
-
#
|
512
|
+
#
|
513
513
|
# Note that `Method` implements `to_proc` method, which means it can be used
|
514
514
|
# with iterators.
|
515
|
-
#
|
515
|
+
#
|
516
516
|
# [ 1, 2, 3 ].each(&method(:puts)) # => prints 3 lines to stdout
|
517
|
-
#
|
517
|
+
#
|
518
518
|
# out = File.open('test.txt', 'w')
|
519
519
|
# [ 1, 2, 3 ].each(&out.method(:puts)) # => prints 3 lines to file
|
520
|
-
#
|
520
|
+
#
|
521
521
|
# require 'date'
|
522
522
|
# %w[2017-03-01 2017-03-02].collect(&Date.method(:parse))
|
523
523
|
# #=> [#<Date: 2017-03-01 ((2457814j,0s,0n),+0s,2299161j)>, #<Date: 2017-03-02 ((2457815j,0s,0n),+0s,2299161j)>]
|
524
|
-
#
|
524
|
+
#
|
525
525
|
def method: (String | Symbol name) -> Method
|
526
526
|
|
527
527
|
# Returns a list of the names of public and protected methods of *obj*. This
|
@@ -529,7 +529,7 @@ class Object < BasicObject
|
|
529
529
|
# parameter is `false`, it returns an array of *obj<i>'s public and protected
|
530
530
|
# singleton methods, the array will not include methods in modules included in
|
531
531
|
# <i>obj*.
|
532
|
-
#
|
532
|
+
#
|
533
533
|
# class Klass
|
534
534
|
# def klass_method()
|
535
535
|
# end
|
@@ -539,69 +539,69 @@ class Object < BasicObject
|
|
539
539
|
# # :==~, :!, :eql?
|
540
540
|
# # :hash, :<=>, :class, :singleton_class]
|
541
541
|
# k.methods.length #=> 56
|
542
|
-
#
|
542
|
+
#
|
543
543
|
# k.methods(false) #=> []
|
544
544
|
# def k.singleton_method; end
|
545
545
|
# k.methods(false) #=> [:singleton_method]
|
546
|
-
#
|
546
|
+
#
|
547
547
|
# module M123; def m123; end end
|
548
548
|
# k.extend M123
|
549
549
|
# k.methods(false) #=> [:singleton_method]
|
550
|
-
#
|
550
|
+
#
|
551
551
|
def methods: () -> Array[Symbol]
|
552
552
|
|
553
553
|
# Only the object *nil* responds `true` to `nil?`.
|
554
|
-
#
|
554
|
+
#
|
555
555
|
# Object.new.nil? #=> false
|
556
556
|
# nil.nil? #=> true
|
557
|
-
#
|
557
|
+
#
|
558
558
|
def `nil?`: () -> bool
|
559
559
|
|
560
560
|
# Returns an integer identifier for `obj`.
|
561
|
-
#
|
561
|
+
#
|
562
562
|
# The same number will be returned on all calls to `object_id` for a given
|
563
563
|
# object, and no two active objects will share an id.
|
564
|
-
#
|
564
|
+
#
|
565
565
|
# Note: that some objects of builtin classes are reused for optimization. This
|
566
566
|
# is the case for immediate values and frozen string literals.
|
567
|
-
#
|
567
|
+
#
|
568
568
|
# Immediate values are not passed by reference but are passed by value: `nil`,
|
569
569
|
# `true`, `false`, Fixnums, Symbols, and some Floats.
|
570
|
-
#
|
570
|
+
#
|
571
571
|
# Object.new.object_id == Object.new.object_id # => false
|
572
572
|
# (21 * 2).object_id == (21 * 2).object_id # => true
|
573
573
|
# "hello".object_id == "hello".object_id # => false
|
574
574
|
# "hi".freeze.object_id == "hi".freeze.object_id # => true
|
575
|
-
#
|
575
|
+
#
|
576
576
|
def object_id: () -> Integer
|
577
577
|
|
578
578
|
# Returns the list of private methods accessible to *obj*. If the *all*
|
579
579
|
# parameter is set to `false`, only those methods in the receiver will be
|
580
580
|
# listed.
|
581
|
-
#
|
581
|
+
#
|
582
582
|
def private_methods: () -> Array[Symbol]
|
583
583
|
|
584
584
|
# Returns the list of protected methods accessible to *obj*. If the *all*
|
585
585
|
# parameter is set to `false`, only those methods in the receiver will be
|
586
586
|
# listed.
|
587
|
-
#
|
587
|
+
#
|
588
588
|
def protected_methods: () -> Array[Symbol]
|
589
589
|
|
590
590
|
# Similar to *method*, searches public method only.
|
591
|
-
#
|
591
|
+
#
|
592
592
|
def public_method: (name name) -> Method
|
593
593
|
|
594
594
|
# Invokes the method identified by *symbol*, passing it any arguments specified.
|
595
595
|
# Unlike send, public_send calls public methods only. When the method is
|
596
596
|
# identified by a string, the string is converted to a symbol.
|
597
|
-
#
|
597
|
+
#
|
598
598
|
# 1.public_send(:puts, "hello") # causes NoMethodError
|
599
|
-
#
|
599
|
+
#
|
600
600
|
def `public_send`: (name name, *untyped args) ?{ (*untyped) -> untyped } -> untyped
|
601
601
|
|
602
602
|
# Removes the named instance variable from *obj*, returning that variable's
|
603
603
|
# value. String arguments are converted to symbols.
|
604
|
-
#
|
604
|
+
#
|
605
605
|
# class Dummy
|
606
606
|
# attr_reader :var
|
607
607
|
# def initialize
|
@@ -615,29 +615,29 @@ class Object < BasicObject
|
|
615
615
|
# d.var #=> 99
|
616
616
|
# d.remove #=> 99
|
617
617
|
# d.var #=> nil
|
618
|
-
#
|
618
|
+
#
|
619
619
|
def remove_instance_variable: (name name) -> untyped
|
620
620
|
|
621
621
|
# Returns `true` if *obj* responds to the given method. Private and protected
|
622
622
|
# methods are included in the search only if the optional second parameter
|
623
623
|
# evaluates to `true`.
|
624
|
-
#
|
624
|
+
#
|
625
625
|
# If the method is not implemented, as Process.fork on Windows, File.lchmod on
|
626
626
|
# GNU/Linux, etc., false is returned.
|
627
|
-
#
|
627
|
+
#
|
628
628
|
# If the method is not defined, `respond_to_missing?` method is called and the
|
629
629
|
# result is returned.
|
630
|
-
#
|
630
|
+
#
|
631
631
|
# When the method name parameter is given as a string, the string is converted
|
632
632
|
# to a symbol.
|
633
|
-
#
|
633
|
+
#
|
634
634
|
def respond_to?: (name name, ?bool include_all) -> bool
|
635
635
|
|
636
636
|
# Invokes the method identified by *symbol*, passing it any arguments specified.
|
637
637
|
# You can use `__send__` if the name `send` clashes with an existing method in
|
638
638
|
# *obj*. When the method is identified by a string, the string is converted to a
|
639
639
|
# symbol.
|
640
|
-
#
|
640
|
+
#
|
641
641
|
# class Klass
|
642
642
|
# def hello(*args)
|
643
643
|
# "Hello " + args.join(' ')
|
@@ -645,24 +645,24 @@ class Object < BasicObject
|
|
645
645
|
# end
|
646
646
|
# k = Klass.new
|
647
647
|
# k.send :hello, "gentle", "readers" #=> "Hello gentle readers"
|
648
|
-
#
|
648
|
+
#
|
649
649
|
def `send`: (name name, *untyped args) ?{ (*untyped) -> untyped } -> untyped
|
650
650
|
|
651
651
|
# Returns the singleton class of *obj*. This method creates a new singleton
|
652
652
|
# class if *obj* does not have one.
|
653
|
-
#
|
653
|
+
#
|
654
654
|
# If *obj* is `nil`, `true`, or `false`, it returns NilClass, TrueClass, or
|
655
655
|
# FalseClass, respectively. If *obj* is an Integer, a Float or a Symbol, it
|
656
656
|
# raises a TypeError.
|
657
|
-
#
|
657
|
+
#
|
658
658
|
# Object.new.singleton_class #=> #<Class:#<Object:0xb7ce1e24>>
|
659
659
|
# String.singleton_class #=> #<Class:String>
|
660
660
|
# nil.singleton_class #=> NilClass
|
661
|
-
#
|
661
|
+
#
|
662
662
|
def `singleton_class`: () -> Class
|
663
663
|
|
664
664
|
# Similar to *method*, searches singleton method only.
|
665
|
-
#
|
665
|
+
#
|
666
666
|
# class Demo
|
667
667
|
# def initialize(n)
|
668
668
|
# @iv = n
|
@@ -671,7 +671,7 @@ class Object < BasicObject
|
|
671
671
|
# "Hello, @iv = #{@iv}"
|
672
672
|
# end
|
673
673
|
# end
|
674
|
-
#
|
674
|
+
#
|
675
675
|
# k = Demo.new(99)
|
676
676
|
# def k.hi
|
677
677
|
# "Hi, @iv = #{@iv}"
|
@@ -679,99 +679,99 @@ class Object < BasicObject
|
|
679
679
|
# m = k.singleton_method(:hi)
|
680
680
|
# m.call #=> "Hi, @iv = 99"
|
681
681
|
# m = k.singleton_method(:hello) #=> NameError
|
682
|
-
#
|
682
|
+
#
|
683
683
|
def singleton_method: (name name) -> Method
|
684
684
|
|
685
685
|
# Returns an array of the names of singleton methods for *obj*. If the optional
|
686
686
|
# *all* parameter is true, the list will include methods in modules included in
|
687
687
|
# *obj*. Only public and protected singleton methods are returned.
|
688
|
-
#
|
688
|
+
#
|
689
689
|
# module Other
|
690
690
|
# def three() end
|
691
691
|
# end
|
692
|
-
#
|
692
|
+
#
|
693
693
|
# class Single
|
694
694
|
# def Single.four() end
|
695
695
|
# end
|
696
|
-
#
|
696
|
+
#
|
697
697
|
# a = Single.new
|
698
|
-
#
|
698
|
+
#
|
699
699
|
# def a.one()
|
700
700
|
# end
|
701
|
-
#
|
701
|
+
#
|
702
702
|
# class << a
|
703
703
|
# include Other
|
704
704
|
# def two()
|
705
705
|
# end
|
706
706
|
# end
|
707
|
-
#
|
707
|
+
#
|
708
708
|
# Single.singleton_methods #=> [:four]
|
709
709
|
# a.singleton_methods(false) #=> [:two, :one]
|
710
710
|
# a.singleton_methods #=> [:two, :one, :three]
|
711
|
-
#
|
711
|
+
#
|
712
712
|
def singleton_methods: () -> Array[Symbol]
|
713
713
|
|
714
714
|
# Mark the object as tainted.
|
715
|
-
#
|
715
|
+
#
|
716
716
|
# Objects that are marked as tainted will be restricted from various built-in
|
717
717
|
# methods. This is to prevent insecure data, such as command-line arguments or
|
718
718
|
# strings read from Kernel#gets, from inadvertently compromising the user's
|
719
719
|
# system.
|
720
|
-
#
|
720
|
+
#
|
721
721
|
# To check whether an object is tainted, use #tainted?.
|
722
|
-
#
|
722
|
+
#
|
723
723
|
# You should only untaint a tainted object if your code has inspected it and
|
724
724
|
# determined that it is safe. To do so use #untaint.
|
725
|
-
#
|
725
|
+
#
|
726
726
|
def taint: () -> self
|
727
727
|
|
728
728
|
# Deprecated method that is equivalent to #taint.
|
729
|
-
#
|
729
|
+
#
|
730
730
|
alias untrust taint
|
731
731
|
|
732
732
|
# Returns true if the object is tainted.
|
733
|
-
#
|
733
|
+
#
|
734
734
|
# See #taint for more information.
|
735
|
-
#
|
735
|
+
#
|
736
736
|
def tainted?: () -> bool
|
737
737
|
|
738
738
|
# Deprecated method that is equivalent to #tainted?.
|
739
|
-
#
|
739
|
+
#
|
740
740
|
alias untrusted? tainted?
|
741
741
|
|
742
742
|
# Yields self to the block, and then returns self. The primary purpose of this
|
743
743
|
# method is to "tap into" a method chain, in order to perform operations on
|
744
744
|
# intermediate results within the chain.
|
745
|
-
#
|
745
|
+
#
|
746
746
|
# (1..10) .tap {|x| puts "original: #{x}" }
|
747
747
|
# .to_a .tap {|x| puts "array: #{x}" }
|
748
748
|
# .select {|x| x.even? } .tap {|x| puts "evens: #{x}" }
|
749
749
|
# .map {|x| x*x } .tap {|x| puts "squares: #{x}" }
|
750
|
-
#
|
750
|
+
#
|
751
751
|
def tap: () { (self) -> void } -> self
|
752
752
|
|
753
753
|
# Yields self to the block and returns the result of the block.
|
754
|
-
#
|
754
|
+
#
|
755
755
|
# 3.next.then {|x| x**x }.to_s #=> "256"
|
756
756
|
# "my string".yield_self {|s| s.upcase } #=> "MY STRING"
|
757
|
-
#
|
757
|
+
#
|
758
758
|
# Good usage for `yield_self` is value piping in method chains:
|
759
|
-
#
|
759
|
+
#
|
760
760
|
# require 'open-uri'
|
761
761
|
# require 'json'
|
762
|
-
#
|
762
|
+
#
|
763
763
|
# construct_url(arguments).
|
764
764
|
# yield_self {|url| open(url).read }.
|
765
765
|
# yield_self {|response| JSON.parse(response) }
|
766
|
-
#
|
766
|
+
#
|
767
767
|
# When called without block, the method returns `Enumerator`, which can be used,
|
768
768
|
# for example, for conditional circuit-breaking:
|
769
|
-
#
|
769
|
+
#
|
770
770
|
# # meets condition, no-op
|
771
771
|
# 1.yield_self.detect(&:odd?) # => 1
|
772
772
|
# # does not meet condition, drop value
|
773
773
|
# 2.yield_self.detect(&:odd?) # => nil
|
774
|
-
#
|
774
|
+
#
|
775
775
|
def `yield_self`: [X] () { (self) -> X } -> X
|
776
776
|
| () -> Enumerator[self, untyped]
|
777
777
|
|
@@ -779,41 +779,41 @@ class Object < BasicObject
|
|
779
779
|
# class and an encoding of the object id. As a special case, the top-level
|
780
780
|
# object that is the initial execution context of Ruby programs returns
|
781
781
|
# ``main''.
|
782
|
-
#
|
782
|
+
#
|
783
783
|
def to_s: () -> String
|
784
784
|
|
785
785
|
# Removes the tainted mark from the object.
|
786
|
-
#
|
786
|
+
#
|
787
787
|
# See #taint for more information.
|
788
|
-
#
|
788
|
+
#
|
789
789
|
def untaint: () -> self
|
790
790
|
|
791
791
|
# Deprecated method that is equivalent to #untaint.
|
792
|
-
#
|
792
|
+
#
|
793
793
|
alias trust untaint
|
794
794
|
|
795
795
|
# Yields self to the block and returns the result of the block.
|
796
|
-
#
|
796
|
+
#
|
797
797
|
# 3.next.then {|x| x**x }.to_s #=> "256"
|
798
798
|
# "my string".yield_self {|s| s.upcase } #=> "MY STRING"
|
799
|
-
#
|
799
|
+
#
|
800
800
|
# Good usage for `yield_self` is value piping in method chains:
|
801
|
-
#
|
801
|
+
#
|
802
802
|
# require 'open-uri'
|
803
803
|
# require 'json'
|
804
|
-
#
|
804
|
+
#
|
805
805
|
# construct_url(arguments).
|
806
806
|
# yield_self {|url| open(url).read }.
|
807
807
|
# yield_self {|response| JSON.parse(response) }
|
808
|
-
#
|
808
|
+
#
|
809
809
|
# When called without block, the method returns `Enumerator`, which can be used,
|
810
810
|
# for example, for conditional circuit-breaking:
|
811
|
-
#
|
811
|
+
#
|
812
812
|
# # meets condition, no-op
|
813
813
|
# 1.yield_self.detect(&:odd?) # => 1
|
814
814
|
# # does not meet condition, drop value
|
815
815
|
# 2.yield_self.detect(&:odd?) # => nil
|
816
|
-
#
|
816
|
+
#
|
817
817
|
alias then yield_self
|
818
818
|
end
|
819
819
|
|