rbs 3.2.2 → 3.3.0.pre.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/comments.yml +1 -1
- data/.github/workflows/ruby.yml +7 -2
- data/CHANGELOG.md +85 -0
- data/Gemfile.lock +14 -14
- data/README.md +11 -2
- data/Rakefile +10 -7
- data/Steepfile +7 -7
- data/core/basic_object.rbs +7 -7
- data/core/binding.rbs +3 -3
- data/core/builtin.rbs +171 -5
- data/core/constants.rbs +17 -17
- data/core/dir.rbs +3 -3
- data/core/encoding.rbs +434 -628
- data/core/enumerator.rbs +37 -0
- data/core/exception.rbs +11 -11
- data/core/false_class.rbs +5 -11
- data/core/fiber.rbs +3 -3
- data/core/file_test.rbs +28 -26
- data/core/kernel.rbs +900 -21
- data/core/marshal.rbs +24 -14
- data/core/match_data.rbs +8 -8
- data/core/math.rbs +57 -53
- data/core/method.rbs +3 -1
- data/core/module.rbs +38 -36
- data/core/nil_class.rbs +7 -13
- data/core/object.rbs +3 -966
- data/core/process.rbs +3 -3
- data/core/ractor.rbs +2 -2
- data/core/rb_config.rbs +64 -43
- data/core/regexp.rbs +3 -3
- data/core/signal.rbs +10 -4
- data/core/struct.rbs +1 -1
- data/core/thread.rbs +7 -7
- data/core/thread_group.rbs +9 -9
- data/core/true_class.rbs +5 -11
- data/core/unbound_method.rbs +56 -7
- data/core/warning.rbs +33 -0
- data/docs/collection.md +56 -6
- data/docs/data_and_struct.md +57 -0
- data/docs/stdlib.md +61 -2
- data/docs/syntax.md +123 -2
- data/ext/rbs_extension/lexer.c +624 -569
- data/ext/rbs_extension/lexer.h +1 -0
- data/ext/rbs_extension/lexer.re +1 -0
- data/ext/rbs_extension/lexstate.c +1 -0
- data/ext/rbs_extension/parser.c +6 -0
- data/goodcheck.yml +2 -2
- data/lib/rbs/annotate/formatter.rb +13 -3
- data/lib/rbs/annotate/rdoc_source.rb +10 -1
- data/lib/rbs/cli/colored_io.rb +48 -0
- data/lib/rbs/cli/diff.rb +80 -0
- data/lib/rbs/cli.rb +151 -16
- data/lib/rbs/collection/config/lockfile.rb +0 -25
- data/lib/rbs/collection/config/lockfile_generator.rb +0 -6
- data/lib/rbs/collection/installer.rb +1 -1
- data/lib/rbs/collection/sources/git.rb +6 -4
- data/lib/rbs/collection/sources/local.rb +7 -5
- data/lib/rbs/diff.rb +104 -0
- data/lib/rbs/environment.rb +1 -1
- data/lib/rbs/method_type.rb +23 -0
- data/lib/rbs/prototype/rb.rb +2 -9
- data/lib/rbs/prototype/runtime/helpers.rb +59 -0
- data/lib/rbs/prototype/runtime/value_object_generator.rb +236 -0
- data/lib/rbs/prototype/runtime.rb +234 -150
- data/lib/rbs/sorter.rb +144 -117
- data/lib/rbs/test/guaranteed.rb +31 -0
- data/lib/rbs/test/type_check.rb +4 -4
- data/lib/rbs/test.rb +3 -0
- data/lib/rbs/types.rb +184 -3
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs/writer.rb +4 -4
- data/lib/rbs.rb +1 -0
- data/rbs.gemspec +1 -0
- data/sig/annotate/formatter.rbs +2 -2
- data/sig/annotate/rdoc_annotater.rbs +1 -1
- data/sig/cli/colored_io.rbs +15 -0
- data/sig/cli/diff.rbs +21 -0
- data/sig/cli.rbs +2 -0
- data/sig/collection/config/lockfile.rbs +0 -6
- data/sig/diff.rbs +23 -0
- data/sig/errors.rbs +1 -5
- data/sig/method_types.rbs +6 -0
- data/sig/prototype/runtime.rbs +108 -0
- data/sig/rdoc/rbs.rbs +4 -0
- data/sig/shims/bundler.rbs +5 -0
- data/sig/sorter.rbs +23 -5
- data/sig/types.rbs +29 -0
- data/stdlib/benchmark/0/benchmark.rbs +1 -1
- data/stdlib/cgi/0/core.rbs +2 -2
- data/stdlib/did_you_mean/0/did_you_mean.rbs +2 -2
- data/stdlib/digest/0/digest.rbs +1 -1
- data/stdlib/fileutils/0/fileutils.rbs +1 -1
- data/stdlib/forwardable/0/forwardable.rbs +4 -4
- data/stdlib/io-console/0/io-console.rbs +1 -1
- data/stdlib/json/0/json.rbs +37 -0
- data/stdlib/logger/0/logger.rbs +2 -2
- data/stdlib/net-http/0/manifest.yaml +1 -1
- data/stdlib/net-http/0/net-http.rbs +16 -63
- data/stdlib/net-protocol/0/manifest.yaml +2 -0
- data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
- data/stdlib/openssl/0/openssl.rbs +1 -1
- data/stdlib/pp/0/manifest.yaml +2 -0
- data/stdlib/pp/0/pp.rbs +301 -0
- data/stdlib/{yaml → psych}/0/dbm.rbs +3 -3
- data/stdlib/psych/0/manifest.yaml +3 -0
- data/stdlib/psych/0/psych.rbs +391 -0
- data/stdlib/{yaml → psych}/0/store.rbs +2 -2
- data/stdlib/rdoc/0/code_object.rbs +55 -0
- data/stdlib/rdoc/0/comment.rbs +60 -0
- data/stdlib/rdoc/0/context.rbs +153 -0
- data/stdlib/rdoc/0/markup.rbs +119 -0
- data/stdlib/rdoc/0/parser.rbs +56 -0
- data/stdlib/rdoc/0/rdoc.rbs +0 -372
- data/stdlib/rdoc/0/ri.rbs +17 -0
- data/stdlib/rdoc/0/store.rbs +48 -0
- data/stdlib/rdoc/0/top_level.rbs +97 -0
- data/stdlib/socket/0/basic_socket.rbs +1 -1
- data/stdlib/socket/0/socket.rbs +1 -1
- data/stdlib/uri/0/common.rbs +1 -1
- data/stdlib/yaml/0/manifest.yaml +1 -2
- data/stdlib/yaml/0/yaml.rbs +1 -199
- metadata +46 -9
- data/sig/shims/pp.rbs +0 -3
- data/sig/shims.rbs +0 -47
data/core/kernel.rbs
CHANGED
@@ -385,8 +385,6 @@ module Kernel : BasicObject
|
|
385
385
|
def self?.fork: () -> Integer?
|
386
386
|
| () { () -> void } -> Integer
|
387
387
|
|
388
|
-
def initialize_copy: (self object) -> self
|
389
|
-
|
390
388
|
# <!--
|
391
389
|
# rdoc-file=object.c
|
392
390
|
# - Array(object) -> object or new_array
|
@@ -404,8 +402,7 @@ module Kernel : BasicObject
|
|
404
402
|
# Array(:foo) # => [:foo]
|
405
403
|
#
|
406
404
|
def self?.Array: (nil) -> []
|
407
|
-
| [T] (
|
408
|
-
| [T] (_ToAry[T] | _ToA[T] array_like) -> Array[T]
|
405
|
+
| [T] (array[T] | _ToA[T] array_like) -> Array[T]
|
409
406
|
| [T] (T ele) -> [T]
|
410
407
|
|
411
408
|
# <!--
|
@@ -448,7 +445,7 @@ module Kernel : BasicObject
|
|
448
445
|
| (_ToC complex_like, exception: bool) -> Complex?
|
449
446
|
| (Numeric | String real, ?Numeric | String imag, ?exception: true) -> Complex
|
450
447
|
| (Numeric | String real, ?Numeric | String imag, exception: bool) -> Complex?
|
451
|
-
| (untyped, ?untyped, exception:
|
448
|
+
| (untyped, ?untyped, ?exception: bool) -> Complex?
|
452
449
|
|
453
450
|
# <!--
|
454
451
|
# rdoc-file=kernel.rb
|
@@ -468,7 +465,7 @@ module Kernel : BasicObject
|
|
468
465
|
#
|
469
466
|
def self?.Float: (_ToF float_like, ?exception: true) -> Float
|
470
467
|
| (_ToF float_like, exception: bool) -> Float?
|
471
|
-
| (untyped, exception:
|
468
|
+
| (untyped, ?exception: bool) -> Float?
|
472
469
|
|
473
470
|
# <!--
|
474
471
|
# rdoc-file=object.c
|
@@ -493,7 +490,7 @@ module Kernel : BasicObject
|
|
493
490
|
# Hash([]) # => {}
|
494
491
|
#
|
495
492
|
def self?.Hash: [K, V] (nil | [] _empty) -> Hash[K, V]
|
496
|
-
| [K, V] (
|
493
|
+
| [K, V] (hash[K, V] hash_like) -> Hash[K, V]
|
497
494
|
|
498
495
|
# <!--
|
499
496
|
# rdoc-file=object.c
|
@@ -579,11 +576,11 @@ module Kernel : BasicObject
|
|
579
576
|
# With `exception` given as `false`, an exception of any kind is suppressed and
|
580
577
|
# `nil` is returned.
|
581
578
|
#
|
582
|
-
def self?.Integer: (
|
583
|
-
| (
|
584
|
-
| (string str,
|
585
|
-
| (string str,
|
586
|
-
| (untyped, ?untyped, exception:
|
579
|
+
def self?.Integer: (int | _ToI int_like, ?exception: true) -> Integer
|
580
|
+
| (int | _ToI int_like, exception: bool) -> Integer?
|
581
|
+
| (string str, int base, ?exception: true) -> Integer
|
582
|
+
| (string str, int base, exception: bool) -> Integer?
|
583
|
+
| (untyped, ?untyped, ?exception: bool) -> Integer?
|
587
584
|
|
588
585
|
# <!--
|
589
586
|
# rdoc-file=rational.c
|
@@ -622,13 +619,13 @@ module Kernel : BasicObject
|
|
622
619
|
#
|
623
620
|
# See also String#to_r.
|
624
621
|
#
|
625
|
-
def self?.Rational: (
|
626
|
-
| (
|
627
|
-
| (
|
628
|
-
| (
|
622
|
+
def self?.Rational: (int | _ToR rational_like, ?exception: true) -> Rational
|
623
|
+
| (int | _ToR rational_like, exception: bool) -> Rational?
|
624
|
+
| (int | _ToR numer, ?int | _ToR denom, ?exception: true) -> Rational
|
625
|
+
| (int | _ToR numer, ?int | _ToR denom, exception: bool) -> Rational?
|
629
626
|
| [T] (Numeric&_RationalDiv[T] numer, Numeric denom, ?exception: bool) -> T
|
630
627
|
| [T < Numeric] (T value, 1, ?exception: bool) -> T
|
631
|
-
| (untyped, ?untyped, exception:
|
628
|
+
| (untyped, ?untyped, ?exception: bool) -> Rational?
|
632
629
|
|
633
630
|
interface _RationalDiv[T]
|
634
631
|
def /: (Numeric) -> T
|
@@ -745,7 +742,7 @@ module Kernel : BasicObject
|
|
745
742
|
# If *const* is defined as autoload, the file name to be loaded is replaced with
|
746
743
|
# *filename*. If *const* is defined but not as autoload, does nothing.
|
747
744
|
#
|
748
|
-
def self?.autoload: (
|
745
|
+
def self?.autoload: (interned _module, String filename) -> NilClass
|
749
746
|
|
750
747
|
# <!--
|
751
748
|
# rdoc-file=load.c
|
@@ -756,7 +753,7 @@ module Kernel : BasicObject
|
|
756
753
|
# autoload(:B, "b")
|
757
754
|
# autoload?(:B) #=> "b"
|
758
755
|
#
|
759
|
-
def self?.autoload?: (
|
756
|
+
def self?.autoload?: (interned name) -> String?
|
760
757
|
|
761
758
|
# <!--
|
762
759
|
# rdoc-file=proc.c
|
@@ -846,7 +843,8 @@ module Kernel : BasicObject
|
|
846
843
|
#
|
847
844
|
def self?.fail: () -> bot
|
848
845
|
| (string message, ?cause: Exception?) -> bot
|
849
|
-
| (_Exception exception, ?_ToS? message, ?
|
846
|
+
| (_Exception exception, ?_ToS? message, ?String | Array[String] | nil backtrace, ?cause: Exception?) -> bot
|
847
|
+
| (_Exception exception, ?cause: Exception?, **untyped) -> bot
|
850
848
|
|
851
849
|
# <!--
|
852
850
|
# rdoc-file=eval.c
|
@@ -1568,7 +1566,7 @@ module Kernel : BasicObject
|
|
1568
1566
|
# Time.new #=> 2008-03-08 19:56:22 +0900
|
1569
1567
|
#
|
1570
1568
|
def self?.sleep: (?nil) -> bot
|
1571
|
-
| (
|
1569
|
+
| (Integer | Float | _Divmod duration) -> Integer
|
1572
1570
|
|
1573
1571
|
interface _Divmod
|
1574
1572
|
def divmod: (Numeric) -> [ Numeric, Numeric ]
|
@@ -2097,6 +2095,887 @@ module Kernel : BasicObject
|
|
2097
2095
|
#
|
2098
2096
|
def self?.system: (String command, *String args, ?unsetenv_others: boolish, ?pgroup: true | Integer, ?umask: Integer, ?in: redirect_fd, ?out: redirect_fd, ?err: redirect_fd, ?close_others: boolish, ?chdir: String) -> (NilClass | FalseClass | TrueClass)
|
2099
2097
|
| (Hash[string, string?] env, String command, *String args, ?unsetenv_others: boolish, ?pgroup: true | Integer, ?umask: Integer, ?in: redirect_fd, ?out: redirect_fd, ?err: redirect_fd, ?close_others: boolish, ?chdir: String) -> (NilClass | FalseClass | TrueClass)
|
2098
|
+
|
2099
|
+
# <!--
|
2100
|
+
# rdoc-file=object.c
|
2101
|
+
# - obj !~ other -> true or false
|
2102
|
+
# -->
|
2103
|
+
# Returns true if two objects do not match (using the *=~* method), otherwise
|
2104
|
+
# false.
|
2105
|
+
#
|
2106
|
+
def !~: (untyped) -> bool
|
2107
|
+
|
2108
|
+
# <!--
|
2109
|
+
# rdoc-file=object.c
|
2110
|
+
# - obj <=> other -> 0 or nil
|
2111
|
+
# -->
|
2112
|
+
# Returns 0 if `obj` and `other` are the same object or `obj == other`,
|
2113
|
+
# otherwise nil.
|
2114
|
+
#
|
2115
|
+
# The #<=> is used by various methods to compare objects, for example
|
2116
|
+
# Enumerable#sort, Enumerable#max etc.
|
2117
|
+
#
|
2118
|
+
# Your implementation of #<=> should return one of the following values: -1, 0,
|
2119
|
+
# 1 or nil. -1 means self is smaller than other. 0 means self is equal to other.
|
2120
|
+
# 1 means self is bigger than other. Nil means the two values could not be
|
2121
|
+
# compared.
|
2122
|
+
#
|
2123
|
+
# When you define #<=>, you can include Comparable to gain the methods #<=, #<,
|
2124
|
+
# #==, #>=, #> and #between?.
|
2125
|
+
#
|
2126
|
+
def <=>: (untyped) -> Integer?
|
2127
|
+
|
2128
|
+
# <!--
|
2129
|
+
# rdoc-file=object.c
|
2130
|
+
# - obj === other -> true or false
|
2131
|
+
# -->
|
2132
|
+
# Case Equality -- For class Object, effectively the same as calling `#==`, but
|
2133
|
+
# typically overridden by descendants to provide meaningful semantics in `case`
|
2134
|
+
# statements.
|
2135
|
+
#
|
2136
|
+
def ===: (untyped) -> bool
|
2137
|
+
|
2138
|
+
# <!--
|
2139
|
+
# rdoc-file=kernel.rb
|
2140
|
+
# - obj.clone(freeze: nil) -> an_object
|
2141
|
+
# -->
|
2142
|
+
# Produces a shallow copy of *obj*---the instance variables of *obj* are copied,
|
2143
|
+
# but not the objects they reference. #clone copies the frozen value state of
|
2144
|
+
# *obj*, unless the `:freeze` keyword argument is given with a false or true
|
2145
|
+
# value. See also the discussion under Object#dup.
|
2146
|
+
#
|
2147
|
+
# class Klass
|
2148
|
+
# attr_accessor :str
|
2149
|
+
# end
|
2150
|
+
# s1 = Klass.new #=> #<Klass:0x401b3a38>
|
2151
|
+
# s1.str = "Hello" #=> "Hello"
|
2152
|
+
# s2 = s1.clone #=> #<Klass:0x401b3998 @str="Hello">
|
2153
|
+
# s2.str[1,4] = "i" #=> "i"
|
2154
|
+
# s1.inspect #=> "#<Klass:0x401b3a38 @str=\"Hi\">"
|
2155
|
+
# s2.inspect #=> "#<Klass:0x401b3998 @str=\"Hi\">"
|
2156
|
+
#
|
2157
|
+
# This method may have class-specific behavior. If so, that behavior will be
|
2158
|
+
# documented under the #`initialize_copy` method of the class.
|
2159
|
+
#
|
2160
|
+
def clone: (?freeze: bool?) -> self
|
2161
|
+
|
2162
|
+
# <!--
|
2163
|
+
# rdoc-file=proc.c
|
2164
|
+
# - define_singleton_method(symbol, method) -> symbol
|
2165
|
+
# - define_singleton_method(symbol) { block } -> symbol
|
2166
|
+
# -->
|
2167
|
+
# Defines a public singleton method in the receiver. The *method* parameter can
|
2168
|
+
# be a `Proc`, a `Method` or an `UnboundMethod` object. If a block is specified,
|
2169
|
+
# it is used as the method body. If a block or a method has parameters, they're
|
2170
|
+
# used as method parameters.
|
2171
|
+
#
|
2172
|
+
# class A
|
2173
|
+
# class << self
|
2174
|
+
# def class_name
|
2175
|
+
# to_s
|
2176
|
+
# end
|
2177
|
+
# end
|
2178
|
+
# end
|
2179
|
+
# A.define_singleton_method(:who_am_i) do
|
2180
|
+
# "I am: #{class_name}"
|
2181
|
+
# end
|
2182
|
+
# A.who_am_i # ==> "I am: A"
|
2183
|
+
#
|
2184
|
+
# guy = "Bob"
|
2185
|
+
# guy.define_singleton_method(:hello) { "#{self}: Hello there!" }
|
2186
|
+
# guy.hello #=> "Bob: Hello there!"
|
2187
|
+
#
|
2188
|
+
# chris = "Chris"
|
2189
|
+
# chris.define_singleton_method(:greet) {|greeting| "#{greeting}, I'm Chris!" }
|
2190
|
+
# chris.greet("Hi") #=> "Hi, I'm Chris!"
|
2191
|
+
#
|
2192
|
+
def define_singleton_method: (interned, Method | UnboundMethod | Proc method) -> Symbol
|
2193
|
+
| (interned) { (*untyped) -> untyped } -> Symbol
|
2194
|
+
|
2195
|
+
# <!--
|
2196
|
+
# rdoc-file=io.c
|
2197
|
+
# - display(port = $>) -> nil
|
2198
|
+
# -->
|
2199
|
+
# Writes `self` on the given port:
|
2200
|
+
#
|
2201
|
+
# 1.display
|
2202
|
+
# "cat".display
|
2203
|
+
# [ 4, 5, 6 ].display
|
2204
|
+
# puts
|
2205
|
+
#
|
2206
|
+
# Output:
|
2207
|
+
#
|
2208
|
+
# 1cat[4, 5, 6]
|
2209
|
+
#
|
2210
|
+
def display: (?_Writer port) -> void
|
2211
|
+
|
2212
|
+
# <!--
|
2213
|
+
# rdoc-file=object.c
|
2214
|
+
# - obj.dup -> an_object
|
2215
|
+
# -->
|
2216
|
+
# Produces a shallow copy of *obj*---the instance variables of *obj* are copied,
|
2217
|
+
# but not the objects they reference.
|
2218
|
+
#
|
2219
|
+
# This method may have class-specific behavior. If so, that behavior will be
|
2220
|
+
# documented under the #`initialize_copy` method of the class.
|
2221
|
+
#
|
2222
|
+
# ### on dup vs clone
|
2223
|
+
#
|
2224
|
+
# In general, #clone and #dup may have different semantics in descendant
|
2225
|
+
# classes. While #clone is used to duplicate an object, including its internal
|
2226
|
+
# state, #dup typically uses the class of the descendant object to create the
|
2227
|
+
# new instance.
|
2228
|
+
#
|
2229
|
+
# When using #dup, any modules that the object has been extended with will not
|
2230
|
+
# be copied.
|
2231
|
+
#
|
2232
|
+
# class Klass
|
2233
|
+
# attr_accessor :str
|
2234
|
+
# end
|
2235
|
+
#
|
2236
|
+
# module Foo
|
2237
|
+
# def foo; 'foo'; end
|
2238
|
+
# end
|
2239
|
+
#
|
2240
|
+
# s1 = Klass.new #=> #<Klass:0x401b3a38>
|
2241
|
+
# s1.extend(Foo) #=> #<Klass:0x401b3a38>
|
2242
|
+
# s1.foo #=> "foo"
|
2243
|
+
#
|
2244
|
+
# s2 = s1.clone #=> #<Klass:0x401be280>
|
2245
|
+
# s2.foo #=> "foo"
|
2246
|
+
#
|
2247
|
+
# s3 = s1.dup #=> #<Klass:0x401c1084>
|
2248
|
+
# s3.foo #=> NoMethodError: undefined method `foo' for #<Klass:0x401c1084>
|
2249
|
+
#
|
2250
|
+
def dup: () -> self
|
2251
|
+
|
2252
|
+
# <!-- rdoc-file=enumerator.c -->
|
2253
|
+
# Creates a new Enumerator which will enumerate by calling `method` on `obj`,
|
2254
|
+
# passing `args` if any. What was *yielded* by method becomes values of
|
2255
|
+
# enumerator.
|
2256
|
+
#
|
2257
|
+
# If a block is given, it will be used to calculate the size of the enumerator
|
2258
|
+
# without the need to iterate it (see Enumerator#size).
|
2259
|
+
#
|
2260
|
+
# ### Examples
|
2261
|
+
#
|
2262
|
+
# str = "xyz"
|
2263
|
+
#
|
2264
|
+
# enum = str.enum_for(:each_byte)
|
2265
|
+
# enum.each { |b| puts b }
|
2266
|
+
# # => 120
|
2267
|
+
# # => 121
|
2268
|
+
# # => 122
|
2269
|
+
#
|
2270
|
+
# # protect an array from being modified by some_method
|
2271
|
+
# a = [1, 2, 3]
|
2272
|
+
# some_method(a.to_enum)
|
2273
|
+
#
|
2274
|
+
# # String#split in block form is more memory-effective:
|
2275
|
+
# very_large_string.split("|") { |chunk| return chunk if chunk.include?('DATE') }
|
2276
|
+
# # This could be rewritten more idiomatically with to_enum:
|
2277
|
+
# very_large_string.to_enum(:split, "|").lazy.grep(/DATE/).first
|
2278
|
+
#
|
2279
|
+
# It is typical to call to_enum when defining methods for a generic Enumerable,
|
2280
|
+
# in case no block is passed.
|
2281
|
+
#
|
2282
|
+
# Here is such an example, with parameter passing and a sizing block:
|
2283
|
+
#
|
2284
|
+
# module Enumerable
|
2285
|
+
# # a generic method to repeat the values of any enumerable
|
2286
|
+
# def repeat(n)
|
2287
|
+
# raise ArgumentError, "#{n} is negative!" if n < 0
|
2288
|
+
# unless block_given?
|
2289
|
+
# return to_enum(__method__, n) do # __method__ is :repeat here
|
2290
|
+
# sz = size # Call size and multiply by n...
|
2291
|
+
# sz * n if sz # but return nil if size itself is nil
|
2292
|
+
# end
|
2293
|
+
# end
|
2294
|
+
# each do |*val|
|
2295
|
+
# n.times { yield *val }
|
2296
|
+
# end
|
2297
|
+
# end
|
2298
|
+
# end
|
2299
|
+
#
|
2300
|
+
# %i[hello world].repeat(2) { |w| puts w }
|
2301
|
+
# # => Prints 'hello', 'hello', 'world', 'world'
|
2302
|
+
# enum = (1..14).repeat(3)
|
2303
|
+
# # => returns an Enumerator when called without a block
|
2304
|
+
# enum.first(4) # => [1, 1, 1, 2]
|
2305
|
+
# enum.size # => 42
|
2306
|
+
#
|
2307
|
+
def enum_for: (Symbol method, *untyped, **untyped) ?{ (*untyped, **untyped) -> Integer } -> Enumerator[untyped, untyped]
|
2308
|
+
| () ?{ () -> Integer } -> Enumerator[untyped, self]
|
2309
|
+
|
2310
|
+
%a{annotate:rdoc:skip}
|
2311
|
+
alias to_enum enum_for
|
2312
|
+
|
2313
|
+
# <!--
|
2314
|
+
# rdoc-file=object.c
|
2315
|
+
# - obj == other -> true or false
|
2316
|
+
# - obj.equal?(other) -> true or false
|
2317
|
+
# - obj.eql?(other) -> true or false
|
2318
|
+
# -->
|
2319
|
+
# Equality --- At the Object level, #== returns `true` only if `obj` and `other`
|
2320
|
+
# are the same object. Typically, this method is overridden in descendant
|
2321
|
+
# classes to provide class-specific meaning.
|
2322
|
+
#
|
2323
|
+
# Unlike #==, the #equal? method should never be overridden by subclasses as it
|
2324
|
+
# is used to determine object identity (that is, `a.equal?(b)` if and only if
|
2325
|
+
# `a` is the same object as `b`):
|
2326
|
+
#
|
2327
|
+
# obj = "a"
|
2328
|
+
# other = obj.dup
|
2329
|
+
#
|
2330
|
+
# obj == other #=> true
|
2331
|
+
# obj.equal? other #=> false
|
2332
|
+
# obj.equal? obj #=> true
|
2333
|
+
#
|
2334
|
+
# The #eql? method returns `true` if `obj` and `other` refer to the same hash
|
2335
|
+
# key. This is used by Hash to test members for equality. For any pair of
|
2336
|
+
# objects where #eql? returns `true`, the #hash value of both objects must be
|
2337
|
+
# equal. So any subclass that overrides #eql? should also override #hash
|
2338
|
+
# appropriately.
|
2339
|
+
#
|
2340
|
+
# For objects of class Object, #eql? is synonymous with #==. Subclasses
|
2341
|
+
# normally continue this tradition by aliasing #eql? to their overridden #==
|
2342
|
+
# method, but there are exceptions. Numeric types, for example, perform type
|
2343
|
+
# conversion across #==, but not across #eql?, so:
|
2344
|
+
#
|
2345
|
+
# 1 == 1.0 #=> true
|
2346
|
+
# 1.eql? 1.0 #=> false
|
2347
|
+
#
|
2348
|
+
def eql?: (untyped) -> bool
|
2349
|
+
|
2350
|
+
# <!--
|
2351
|
+
# rdoc-file=eval.c
|
2352
|
+
# - obj.extend(module, ...) -> obj
|
2353
|
+
# -->
|
2354
|
+
# Adds to *obj* the instance methods from each module given as a parameter.
|
2355
|
+
#
|
2356
|
+
# module Mod
|
2357
|
+
# def hello
|
2358
|
+
# "Hello from Mod.\n"
|
2359
|
+
# end
|
2360
|
+
# end
|
2361
|
+
#
|
2362
|
+
# class Klass
|
2363
|
+
# def hello
|
2364
|
+
# "Hello from Klass.\n"
|
2365
|
+
# end
|
2366
|
+
# end
|
2367
|
+
#
|
2368
|
+
# k = Klass.new
|
2369
|
+
# k.hello #=> "Hello from Klass.\n"
|
2370
|
+
# k.extend(Mod) #=> #<Klass:0x401b3bc8>
|
2371
|
+
# k.hello #=> "Hello from Mod.\n"
|
2372
|
+
#
|
2373
|
+
def extend: (*Module) -> self
|
2374
|
+
|
2375
|
+
# <!--
|
2376
|
+
# rdoc-file=object.c
|
2377
|
+
# - obj.freeze -> obj
|
2378
|
+
# -->
|
2379
|
+
# Prevents further modifications to *obj*. A FrozenError will be raised if
|
2380
|
+
# modification is attempted. There is no way to unfreeze a frozen object. See
|
2381
|
+
# also Object#frozen?.
|
2382
|
+
#
|
2383
|
+
# This method returns self.
|
2384
|
+
#
|
2385
|
+
# a = [ "a", "b", "c" ]
|
2386
|
+
# a.freeze
|
2387
|
+
# a << "z"
|
2388
|
+
#
|
2389
|
+
# *produces:*
|
2390
|
+
#
|
2391
|
+
# prog.rb:3:in `<<': can't modify frozen Array (FrozenError)
|
2392
|
+
# from prog.rb:3
|
2393
|
+
#
|
2394
|
+
# Objects of the following classes are always frozen: Integer, Float, Symbol.
|
2395
|
+
#
|
2396
|
+
def freeze: () -> self
|
2397
|
+
|
2398
|
+
# <!--
|
2399
|
+
# rdoc-file=kernel.rb
|
2400
|
+
# - obj.frozen? -> true or false
|
2401
|
+
# -->
|
2402
|
+
# Returns the freeze status of *obj*.
|
2403
|
+
#
|
2404
|
+
# a = [ "a", "b", "c" ]
|
2405
|
+
# a.freeze #=> ["a", "b", "c"]
|
2406
|
+
# a.frozen? #=> true
|
2407
|
+
#
|
2408
|
+
def frozen?: () -> bool
|
2409
|
+
|
2410
|
+
# <!--
|
2411
|
+
# rdoc-file=object.c
|
2412
|
+
# - obj.hash -> integer
|
2413
|
+
# -->
|
2414
|
+
# Generates an Integer hash value for this object. This function must have the
|
2415
|
+
# property that `a.eql?(b)` implies `a.hash == b.hash`.
|
2416
|
+
#
|
2417
|
+
# The hash value is used along with #eql? by the Hash class to determine if two
|
2418
|
+
# objects reference the same hash key. Any hash value that exceeds the capacity
|
2419
|
+
# of an Integer will be truncated before being used.
|
2420
|
+
#
|
2421
|
+
# The hash value for an object may not be identical across invocations or
|
2422
|
+
# implementations of Ruby. If you need a stable identifier across Ruby
|
2423
|
+
# invocations and implementations you will need to generate one with a custom
|
2424
|
+
# method.
|
2425
|
+
#
|
2426
|
+
# Certain core classes such as Integer use built-in hash calculations and do not
|
2427
|
+
# call the #hash method when used as a hash key.
|
2428
|
+
#
|
2429
|
+
# When implementing your own #hash based on multiple values, the best practice
|
2430
|
+
# is to combine the class and any values using the hash code of an array:
|
2431
|
+
#
|
2432
|
+
# For example:
|
2433
|
+
#
|
2434
|
+
# def hash
|
2435
|
+
# [self.class, a, b, c].hash
|
2436
|
+
# end
|
2437
|
+
#
|
2438
|
+
# The reason for this is that the Array#hash method already has logic for safely
|
2439
|
+
# and efficiently combining multiple hash values.
|
2440
|
+
#
|
2441
|
+
def hash: () -> Integer
|
2442
|
+
|
2443
|
+
# <!--
|
2444
|
+
# rdoc-file=object.c
|
2445
|
+
# - obj.inspect -> string
|
2446
|
+
# -->
|
2447
|
+
# Returns a string containing a human-readable representation of *obj*. The
|
2448
|
+
# default #inspect shows the object's class name, an encoding of its memory
|
2449
|
+
# address, and a list of the instance variables and their values (by calling
|
2450
|
+
# #inspect on each of them). User defined classes should override this method
|
2451
|
+
# to provide a better representation of *obj*. When overriding this method, it
|
2452
|
+
# should return a string whose encoding is compatible with the default external
|
2453
|
+
# encoding.
|
2454
|
+
#
|
2455
|
+
# [ 1, 2, 3..4, 'five' ].inspect #=> "[1, 2, 3..4, \"five\"]"
|
2456
|
+
# Time.new.inspect #=> "2008-03-08 19:43:39 +0900"
|
2457
|
+
#
|
2458
|
+
# class Foo
|
2459
|
+
# end
|
2460
|
+
# Foo.new.inspect #=> "#<Foo:0x0300c868>"
|
2461
|
+
#
|
2462
|
+
# class Bar
|
2463
|
+
# def initialize
|
2464
|
+
# @bar = 1
|
2465
|
+
# end
|
2466
|
+
# end
|
2467
|
+
# Bar.new.inspect #=> "#<Bar:0x0300c868 @bar=1>"
|
2468
|
+
#
|
2469
|
+
def inspect: () -> String
|
2470
|
+
|
2471
|
+
# <!--
|
2472
|
+
# rdoc-file=object.c
|
2473
|
+
# - obj.instance_of?(class) -> true or false
|
2474
|
+
# -->
|
2475
|
+
# Returns `true` if *obj* is an instance of the given class. See also
|
2476
|
+
# Object#kind_of?.
|
2477
|
+
#
|
2478
|
+
# class A; end
|
2479
|
+
# class B < A; end
|
2480
|
+
# class C < B; end
|
2481
|
+
#
|
2482
|
+
# b = B.new
|
2483
|
+
# b.instance_of? A #=> false
|
2484
|
+
# b.instance_of? B #=> true
|
2485
|
+
# b.instance_of? C #=> false
|
2486
|
+
#
|
2487
|
+
def instance_of?: (Module) -> bool
|
2488
|
+
|
2489
|
+
# <!--
|
2490
|
+
# rdoc-file=object.c
|
2491
|
+
# - obj.instance_variable_defined?(symbol) -> true or false
|
2492
|
+
# - obj.instance_variable_defined?(string) -> true or false
|
2493
|
+
# -->
|
2494
|
+
# Returns `true` if the given instance variable is defined in *obj*. String
|
2495
|
+
# arguments are converted to symbols.
|
2496
|
+
#
|
2497
|
+
# class Fred
|
2498
|
+
# def initialize(p1, p2)
|
2499
|
+
# @a, @b = p1, p2
|
2500
|
+
# end
|
2501
|
+
# end
|
2502
|
+
# fred = Fred.new('cat', 99)
|
2503
|
+
# fred.instance_variable_defined?(:@a) #=> true
|
2504
|
+
# fred.instance_variable_defined?("@b") #=> true
|
2505
|
+
# fred.instance_variable_defined?("@c") #=> false
|
2506
|
+
#
|
2507
|
+
def instance_variable_defined?: (interned var) -> bool
|
2508
|
+
|
2509
|
+
# <!--
|
2510
|
+
# rdoc-file=object.c
|
2511
|
+
# - obj.instance_variable_get(symbol) -> obj
|
2512
|
+
# - obj.instance_variable_get(string) -> obj
|
2513
|
+
# -->
|
2514
|
+
# Returns the value of the given instance variable, or nil if the instance
|
2515
|
+
# variable is not set. The `@` part of the variable name should be included for
|
2516
|
+
# regular instance variables. Throws a NameError exception if the supplied
|
2517
|
+
# symbol is not valid as an instance variable name. String arguments are
|
2518
|
+
# converted to symbols.
|
2519
|
+
#
|
2520
|
+
# class Fred
|
2521
|
+
# def initialize(p1, p2)
|
2522
|
+
# @a, @b = p1, p2
|
2523
|
+
# end
|
2524
|
+
# end
|
2525
|
+
# fred = Fred.new('cat', 99)
|
2526
|
+
# fred.instance_variable_get(:@a) #=> "cat"
|
2527
|
+
# fred.instance_variable_get("@b") #=> 99
|
2528
|
+
#
|
2529
|
+
def instance_variable_get: (interned var) -> untyped
|
2530
|
+
|
2531
|
+
# <!--
|
2532
|
+
# rdoc-file=object.c
|
2533
|
+
# - obj.instance_variable_set(symbol, obj) -> obj
|
2534
|
+
# - obj.instance_variable_set(string, obj) -> obj
|
2535
|
+
# -->
|
2536
|
+
# Sets the instance variable named by *symbol* to the given object. This may
|
2537
|
+
# circumvent the encapsulation intended by the author of the class, so it should
|
2538
|
+
# be used with care. The variable does not have to exist prior to this call. If
|
2539
|
+
# the instance variable name is passed as a string, that string is converted to
|
2540
|
+
# a symbol.
|
2541
|
+
#
|
2542
|
+
# class Fred
|
2543
|
+
# def initialize(p1, p2)
|
2544
|
+
# @a, @b = p1, p2
|
2545
|
+
# end
|
2546
|
+
# end
|
2547
|
+
# fred = Fred.new('cat', 99)
|
2548
|
+
# fred.instance_variable_set(:@a, 'dog') #=> "dog"
|
2549
|
+
# fred.instance_variable_set(:@c, 'cat') #=> "cat"
|
2550
|
+
# fred.inspect #=> "#<Fred:0x401b3da8 @a=\"dog\", @b=99, @c=\"cat\">"
|
2551
|
+
#
|
2552
|
+
def instance_variable_set: [X] (interned var, X value) -> X
|
2553
|
+
|
2554
|
+
# <!--
|
2555
|
+
# rdoc-file=object.c
|
2556
|
+
# - obj.instance_variables -> array
|
2557
|
+
# -->
|
2558
|
+
# Returns an array of instance variable names for the receiver. Note that simply
|
2559
|
+
# defining an accessor does not create the corresponding instance variable.
|
2560
|
+
#
|
2561
|
+
# class Fred
|
2562
|
+
# attr_accessor :a1
|
2563
|
+
# def initialize
|
2564
|
+
# @iv = 3
|
2565
|
+
# end
|
2566
|
+
# end
|
2567
|
+
# Fred.new.instance_variables #=> [:@iv]
|
2568
|
+
#
|
2569
|
+
def instance_variables: () -> Array[Symbol]
|
2570
|
+
|
2571
|
+
# <!-- rdoc-file=object.c -->
|
2572
|
+
# Returns `true` if *class* is the class of *obj*, or if *class* is one of the
|
2573
|
+
# superclasses of *obj* or modules included in *obj*.
|
2574
|
+
#
|
2575
|
+
# module M; end
|
2576
|
+
# class A
|
2577
|
+
# include M
|
2578
|
+
# end
|
2579
|
+
# class B < A; end
|
2580
|
+
# class C < B; end
|
2581
|
+
#
|
2582
|
+
# b = B.new
|
2583
|
+
# b.is_a? A #=> true
|
2584
|
+
# b.is_a? B #=> true
|
2585
|
+
# b.is_a? C #=> false
|
2586
|
+
# b.is_a? M #=> true
|
2587
|
+
#
|
2588
|
+
# b.kind_of? A #=> true
|
2589
|
+
# b.kind_of? B #=> true
|
2590
|
+
# b.kind_of? C #=> false
|
2591
|
+
# b.kind_of? M #=> true
|
2592
|
+
#
|
2593
|
+
def is_a?: (Module) -> bool
|
2594
|
+
|
2595
|
+
%a{annotate:rdoc:skip}
|
2596
|
+
alias kind_of? is_a?
|
2597
|
+
|
2598
|
+
# <!--
|
2599
|
+
# rdoc-file=object.c
|
2600
|
+
# - obj.itself -> obj
|
2601
|
+
# -->
|
2602
|
+
# Returns the receiver.
|
2603
|
+
#
|
2604
|
+
# string = "my string"
|
2605
|
+
# string.itself.object_id == string.object_id #=> true
|
2606
|
+
#
|
2607
|
+
def itself: () -> self
|
2608
|
+
|
2609
|
+
# <!--
|
2610
|
+
# rdoc-file=proc.c
|
2611
|
+
# - obj.method(sym) -> method
|
2612
|
+
# -->
|
2613
|
+
# Looks up the named method as a receiver in *obj*, returning a Method object
|
2614
|
+
# (or raising NameError). The Method object acts as a closure in *obj*'s object
|
2615
|
+
# instance, so instance variables and the value of `self` remain available.
|
2616
|
+
#
|
2617
|
+
# class Demo
|
2618
|
+
# def initialize(n)
|
2619
|
+
# @iv = n
|
2620
|
+
# end
|
2621
|
+
# def hello()
|
2622
|
+
# "Hello, @iv = #{@iv}"
|
2623
|
+
# end
|
2624
|
+
# end
|
2625
|
+
#
|
2626
|
+
# k = Demo.new(99)
|
2627
|
+
# m = k.method(:hello)
|
2628
|
+
# m.call #=> "Hello, @iv = 99"
|
2629
|
+
#
|
2630
|
+
# l = Demo.new('Fred')
|
2631
|
+
# m = l.method("hello")
|
2632
|
+
# m.call #=> "Hello, @iv = Fred"
|
2633
|
+
#
|
2634
|
+
# Note that Method implements `to_proc` method, which means it can be used with
|
2635
|
+
# iterators.
|
2636
|
+
#
|
2637
|
+
# [ 1, 2, 3 ].each(&method(:puts)) # => prints 3 lines to stdout
|
2638
|
+
#
|
2639
|
+
# out = File.open('test.txt', 'w')
|
2640
|
+
# [ 1, 2, 3 ].each(&out.method(:puts)) # => prints 3 lines to file
|
2641
|
+
#
|
2642
|
+
# require 'date'
|
2643
|
+
# %w[2017-03-01 2017-03-02].collect(&Date.method(:parse))
|
2644
|
+
# #=> [#<Date: 2017-03-01 ((2457814j,0s,0n),+0s,2299161j)>, #<Date: 2017-03-02 ((2457815j,0s,0n),+0s,2299161j)>]
|
2645
|
+
#
|
2646
|
+
def method: (interned name) -> Method
|
2647
|
+
|
2648
|
+
# <!--
|
2649
|
+
# rdoc-file=object.c
|
2650
|
+
# - obj.methods(regular=true) -> array
|
2651
|
+
# -->
|
2652
|
+
# Returns a list of the names of public and protected methods of *obj*. This
|
2653
|
+
# will include all the methods accessible in *obj*'s ancestors. If the optional
|
2654
|
+
# parameter is `false`, it returns an array of *obj*'s public and protected
|
2655
|
+
# singleton methods, the array will not include methods in modules included in
|
2656
|
+
# *obj*.
|
2657
|
+
#
|
2658
|
+
# class Klass
|
2659
|
+
# def klass_method()
|
2660
|
+
# end
|
2661
|
+
# end
|
2662
|
+
# k = Klass.new
|
2663
|
+
# k.methods[0..9] #=> [:klass_method, :nil?, :===,
|
2664
|
+
# # :==~, :!, :eql?
|
2665
|
+
# # :hash, :<=>, :class, :singleton_class]
|
2666
|
+
# k.methods.length #=> 56
|
2667
|
+
#
|
2668
|
+
# k.methods(false) #=> []
|
2669
|
+
# def k.singleton_method; end
|
2670
|
+
# k.methods(false) #=> [:singleton_method]
|
2671
|
+
#
|
2672
|
+
# module M123; def m123; end end
|
2673
|
+
# k.extend M123
|
2674
|
+
# k.methods(false) #=> [:singleton_method]
|
2675
|
+
#
|
2676
|
+
def methods: () -> Array[Symbol]
|
2677
|
+
|
2678
|
+
# <!--
|
2679
|
+
# rdoc-file=object.c
|
2680
|
+
# - obj.nil? -> true or false
|
2681
|
+
# -->
|
2682
|
+
# Only the object *nil* responds `true` to `nil?`.
|
2683
|
+
#
|
2684
|
+
# Object.new.nil? #=> false
|
2685
|
+
# nil.nil? #=> true
|
2686
|
+
#
|
2687
|
+
def nil?: () -> bool
|
2688
|
+
|
2689
|
+
# <!--
|
2690
|
+
# rdoc-file=gc.c
|
2691
|
+
# - obj.__id__ -> integer
|
2692
|
+
# - obj.object_id -> integer
|
2693
|
+
# -->
|
2694
|
+
# Returns an integer identifier for `obj`.
|
2695
|
+
#
|
2696
|
+
# The same number will be returned on all calls to `object_id` for a given
|
2697
|
+
# object, and no two active objects will share an id.
|
2698
|
+
#
|
2699
|
+
# Note: that some objects of builtin classes are reused for optimization. This
|
2700
|
+
# is the case for immediate values and frozen string literals.
|
2701
|
+
#
|
2702
|
+
# BasicObject implements +__id__+, Kernel implements `object_id`.
|
2703
|
+
#
|
2704
|
+
# Immediate values are not passed by reference but are passed by value: `nil`,
|
2705
|
+
# `true`, `false`, Fixnums, Symbols, and some Floats.
|
2706
|
+
#
|
2707
|
+
# Object.new.object_id == Object.new.object_id # => false
|
2708
|
+
# (21 * 2).object_id == (21 * 2).object_id # => true
|
2709
|
+
# "hello".object_id == "hello".object_id # => false
|
2710
|
+
# "hi".freeze.object_id == "hi".freeze.object_id # => true
|
2711
|
+
#
|
2712
|
+
def object_id: () -> Integer
|
2713
|
+
|
2714
|
+
# <!--
|
2715
|
+
# rdoc-file=object.c
|
2716
|
+
# - obj.private_methods(all=true) -> array
|
2717
|
+
# -->
|
2718
|
+
# Returns the list of private methods accessible to *obj*. If the *all*
|
2719
|
+
# parameter is set to `false`, only those methods in the receiver will be
|
2720
|
+
# listed.
|
2721
|
+
#
|
2722
|
+
def private_methods: () -> Array[Symbol]
|
2723
|
+
|
2724
|
+
# <!--
|
2725
|
+
# rdoc-file=object.c
|
2726
|
+
# - obj.protected_methods(all=true) -> array
|
2727
|
+
# -->
|
2728
|
+
# Returns the list of protected methods accessible to *obj*. If the *all*
|
2729
|
+
# parameter is set to `false`, only those methods in the receiver will be
|
2730
|
+
# listed.
|
2731
|
+
#
|
2732
|
+
def protected_methods: () -> Array[Symbol]
|
2733
|
+
|
2734
|
+
# <!--
|
2735
|
+
# rdoc-file=proc.c
|
2736
|
+
# - obj.public_method(sym) -> method
|
2737
|
+
# -->
|
2738
|
+
# Similar to *method*, searches public method only.
|
2739
|
+
#
|
2740
|
+
def public_method: (interned name) -> Method
|
2741
|
+
|
2742
|
+
# <!--
|
2743
|
+
# rdoc-file=object.c
|
2744
|
+
# - obj.public_methods(all=true) -> array
|
2745
|
+
# -->
|
2746
|
+
# Returns the list of public methods accessible to *obj*. If the *all* parameter
|
2747
|
+
# is set to `false`, only those methods in the receiver will be listed.
|
2748
|
+
#
|
2749
|
+
def public_methods: (?boolish all) -> Array[Symbol]
|
2750
|
+
|
2751
|
+
# <!--
|
2752
|
+
# rdoc-file=vm_eval.c
|
2753
|
+
# - obj.public_send(symbol [, args...]) -> obj
|
2754
|
+
# - obj.public_send(string [, args...]) -> obj
|
2755
|
+
# -->
|
2756
|
+
# Invokes the method identified by *symbol*, passing it any arguments specified.
|
2757
|
+
# Unlike send, public_send calls public methods only. When the method is
|
2758
|
+
# identified by a string, the string is converted to a symbol.
|
2759
|
+
#
|
2760
|
+
# 1.public_send(:puts, "hello") # causes NoMethodError
|
2761
|
+
#
|
2762
|
+
def public_send: (interned name, *untyped args) ?{ (*untyped) -> untyped } -> untyped
|
2763
|
+
|
2764
|
+
# <!--
|
2765
|
+
# rdoc-file=object.c
|
2766
|
+
# - obj.remove_instance_variable(symbol) -> obj
|
2767
|
+
# - obj.remove_instance_variable(string) -> obj
|
2768
|
+
# -->
|
2769
|
+
# Removes the named instance variable from *obj*, returning that variable's
|
2770
|
+
# value. String arguments are converted to symbols.
|
2771
|
+
#
|
2772
|
+
# class Dummy
|
2773
|
+
# attr_reader :var
|
2774
|
+
# def initialize
|
2775
|
+
# @var = 99
|
2776
|
+
# end
|
2777
|
+
# def remove
|
2778
|
+
# remove_instance_variable(:@var)
|
2779
|
+
# end
|
2780
|
+
# end
|
2781
|
+
# d = Dummy.new
|
2782
|
+
# d.var #=> 99
|
2783
|
+
# d.remove #=> 99
|
2784
|
+
# d.var #=> nil
|
2785
|
+
#
|
2786
|
+
def remove_instance_variable: (interned name) -> untyped
|
2787
|
+
|
2788
|
+
# <!--
|
2789
|
+
# rdoc-file=vm_method.c
|
2790
|
+
# - obj.respond_to?(symbol, include_all=false) -> true or false
|
2791
|
+
# - obj.respond_to?(string, include_all=false) -> true or false
|
2792
|
+
# -->
|
2793
|
+
# Returns `true` if *obj* responds to the given method. Private and protected
|
2794
|
+
# methods are included in the search only if the optional second parameter
|
2795
|
+
# evaluates to `true`.
|
2796
|
+
#
|
2797
|
+
# If the method is not implemented, as Process.fork on Windows, File.lchmod on
|
2798
|
+
# GNU/Linux, etc., false is returned.
|
2799
|
+
#
|
2800
|
+
# If the method is not defined, `respond_to_missing?` method is called and the
|
2801
|
+
# result is returned.
|
2802
|
+
#
|
2803
|
+
# When the method name parameter is given as a string, the string is converted
|
2804
|
+
# to a symbol.
|
2805
|
+
#
|
2806
|
+
def respond_to?: (interned name, ?boolish include_all) -> bool
|
2807
|
+
|
2808
|
+
# <!--
|
2809
|
+
# rdoc-file=vm_method.c
|
2810
|
+
# - obj.respond_to_missing?(symbol, include_all) -> true or false
|
2811
|
+
# - obj.respond_to_missing?(string, include_all) -> true or false
|
2812
|
+
# -->
|
2813
|
+
# DO NOT USE THIS DIRECTLY.
|
2814
|
+
#
|
2815
|
+
# Hook method to return whether the *obj* can respond to *id* method or not.
|
2816
|
+
#
|
2817
|
+
# When the method name parameter is given as a string, the string is converted
|
2818
|
+
# to a symbol.
|
2819
|
+
#
|
2820
|
+
# See #respond_to?, and the example of BasicObject.
|
2821
|
+
#
|
2822
|
+
%a{annotate:rdoc:copy:Object#respond_to_missing?}
|
2823
|
+
private def respond_to_missing?: (Symbol, bool) -> bool
|
2824
|
+
|
2825
|
+
# <!--
|
2826
|
+
# rdoc-file=vm_eval.c
|
2827
|
+
# - foo.send(symbol [, args...]) -> obj
|
2828
|
+
# - foo.__send__(symbol [, args...]) -> obj
|
2829
|
+
# - foo.send(string [, args...]) -> obj
|
2830
|
+
# - foo.__send__(string [, args...]) -> obj
|
2831
|
+
# -->
|
2832
|
+
# Invokes the method identified by *symbol*, passing it any arguments specified.
|
2833
|
+
# When the method is identified by a string, the string is converted to a
|
2834
|
+
# symbol.
|
2835
|
+
#
|
2836
|
+
# BasicObject implements +__send__+, Kernel implements `send`. `__send__` is
|
2837
|
+
# safer than `send` when *obj* has the same method name like `Socket`. See also
|
2838
|
+
# `public_send`.
|
2839
|
+
#
|
2840
|
+
# class Klass
|
2841
|
+
# def hello(*args)
|
2842
|
+
# "Hello " + args.join(' ')
|
2843
|
+
# end
|
2844
|
+
# end
|
2845
|
+
# k = Klass.new
|
2846
|
+
# k.send :hello, "gentle", "readers" #=> "Hello gentle readers"
|
2847
|
+
#
|
2848
|
+
def send: (interned name, *untyped args) ?{ (*untyped) -> untyped } -> untyped
|
2849
|
+
|
2850
|
+
# <!--
|
2851
|
+
# rdoc-file=object.c
|
2852
|
+
# - obj.singleton_class -> class
|
2853
|
+
# -->
|
2854
|
+
# Returns the singleton class of *obj*. This method creates a new singleton
|
2855
|
+
# class if *obj* does not have one.
|
2856
|
+
#
|
2857
|
+
# If *obj* is `nil`, `true`, or `false`, it returns NilClass, TrueClass, or
|
2858
|
+
# FalseClass, respectively. If *obj* is an Integer, a Float or a Symbol, it
|
2859
|
+
# raises a TypeError.
|
2860
|
+
#
|
2861
|
+
# Object.new.singleton_class #=> #<Class:#<Object:0xb7ce1e24>>
|
2862
|
+
# String.singleton_class #=> #<Class:String>
|
2863
|
+
# nil.singleton_class #=> NilClass
|
2864
|
+
#
|
2865
|
+
def singleton_class: () -> Class
|
2866
|
+
|
2867
|
+
# <!--
|
2868
|
+
# rdoc-file=proc.c
|
2869
|
+
# - obj.singleton_method(sym) -> method
|
2870
|
+
# -->
|
2871
|
+
# Similar to *method*, searches singleton method only.
|
2872
|
+
#
|
2873
|
+
# class Demo
|
2874
|
+
# def initialize(n)
|
2875
|
+
# @iv = n
|
2876
|
+
# end
|
2877
|
+
# def hello()
|
2878
|
+
# "Hello, @iv = #{@iv}"
|
2879
|
+
# end
|
2880
|
+
# end
|
2881
|
+
#
|
2882
|
+
# k = Demo.new(99)
|
2883
|
+
# def k.hi
|
2884
|
+
# "Hi, @iv = #{@iv}"
|
2885
|
+
# end
|
2886
|
+
# m = k.singleton_method(:hi)
|
2887
|
+
# m.call #=> "Hi, @iv = 99"
|
2888
|
+
# m = k.singleton_method(:hello) #=> NameError
|
2889
|
+
#
|
2890
|
+
def singleton_method: (interned name) -> Method
|
2891
|
+
|
2892
|
+
# <!--
|
2893
|
+
# rdoc-file=object.c
|
2894
|
+
# - obj.singleton_methods(all=true) -> array
|
2895
|
+
# -->
|
2896
|
+
# Returns an array of the names of singleton methods for *obj*. If the optional
|
2897
|
+
# *all* parameter is true, the list will include methods in modules included in
|
2898
|
+
# *obj*. Only public and protected singleton methods are returned.
|
2899
|
+
#
|
2900
|
+
# module Other
|
2901
|
+
# def three() end
|
2902
|
+
# end
|
2903
|
+
#
|
2904
|
+
# class Single
|
2905
|
+
# def Single.four() end
|
2906
|
+
# end
|
2907
|
+
#
|
2908
|
+
# a = Single.new
|
2909
|
+
#
|
2910
|
+
# def a.one()
|
2911
|
+
# end
|
2912
|
+
#
|
2913
|
+
# class << a
|
2914
|
+
# include Other
|
2915
|
+
# def two()
|
2916
|
+
# end
|
2917
|
+
# end
|
2918
|
+
#
|
2919
|
+
# Single.singleton_methods #=> [:four]
|
2920
|
+
# a.singleton_methods(false) #=> [:two, :one]
|
2921
|
+
# a.singleton_methods #=> [:two, :one, :three]
|
2922
|
+
#
|
2923
|
+
def singleton_methods: () -> Array[Symbol]
|
2924
|
+
|
2925
|
+
# <!--
|
2926
|
+
# rdoc-file=kernel.rb
|
2927
|
+
# - obj.tap {|x| block } -> obj
|
2928
|
+
# -->
|
2929
|
+
# Yields self to the block, and then returns self. The primary purpose of this
|
2930
|
+
# method is to "tap into" a method chain, in order to perform operations on
|
2931
|
+
# intermediate results within the chain.
|
2932
|
+
#
|
2933
|
+
# (1..10) .tap {|x| puts "original: #{x}" }
|
2934
|
+
# .to_a .tap {|x| puts "array: #{x}" }
|
2935
|
+
# .select {|x| x.even? } .tap {|x| puts "evens: #{x}" }
|
2936
|
+
# .map {|x| x*x } .tap {|x| puts "squares: #{x}" }
|
2937
|
+
#
|
2938
|
+
def tap: () { (self) -> void } -> self
|
2939
|
+
|
2940
|
+
# <!--
|
2941
|
+
# rdoc-file=object.c
|
2942
|
+
# - obj.to_s -> string
|
2943
|
+
# -->
|
2944
|
+
# Returns a string representing *obj*. The default #to_s prints the object's
|
2945
|
+
# class and an encoding of the object id. As a special case, the top-level
|
2946
|
+
# object that is the initial execution context of Ruby programs returns
|
2947
|
+
# ``main''.
|
2948
|
+
#
|
2949
|
+
def to_s: () -> String
|
2950
|
+
|
2951
|
+
# <!--
|
2952
|
+
# rdoc-file=kernel.rb
|
2953
|
+
# - obj.yield_self {|x| block } -> an_object
|
2954
|
+
# -->
|
2955
|
+
# Yields self to the block and returns the result of the block.
|
2956
|
+
#
|
2957
|
+
# "my string".yield_self {|s| s.upcase } #=> "MY STRING"
|
2958
|
+
#
|
2959
|
+
# Good usage for `then` is value piping in method chains:
|
2960
|
+
#
|
2961
|
+
# require 'open-uri'
|
2962
|
+
# require 'json'
|
2963
|
+
#
|
2964
|
+
# construct_url(arguments).
|
2965
|
+
# then {|url| URI(url).read }.
|
2966
|
+
# then {|response| JSON.parse(response) }
|
2967
|
+
#
|
2968
|
+
def yield_self: [X] () { (self) -> X } -> X
|
2969
|
+
| () -> Enumerator[self, untyped]
|
2970
|
+
|
2971
|
+
%a{annotate:rdoc:skip}
|
2972
|
+
alias then yield_self
|
2973
|
+
|
2974
|
+
private def initialize_copy: (self object) -> self
|
2975
|
+
|
2976
|
+
private def initialize_clone: (self object, ?freeze: bool?) -> self
|
2977
|
+
|
2978
|
+
private def initialize_dup: (self object) -> self
|
2100
2979
|
end
|
2101
2980
|
|
2102
2981
|
Kernel::RUBYGEMS_ACTIVATION_MONITOR: untyped
|