steep 0.11.1 → 0.12.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 +27 -0
- data/.gitmodules +3 -0
- data/CHANGELOG.md +5 -0
- data/README.md +48 -90
- data/Rakefile +10 -6
- data/Steepfile +1 -0
- data/bin/setup +1 -0
- data/bin/smoke_runner.rb +9 -14
- data/exe/rbs +3 -0
- data/exe/ruby-signature +3 -0
- data/exe/steep +1 -0
- data/lib/steep.rb +32 -26
- data/lib/steep/annotation_parser.rb +167 -0
- data/lib/steep/ast/annotation/collection.rb +7 -7
- data/lib/steep/ast/types.rb +60 -0
- data/lib/steep/ast/types/any.rb +1 -1
- data/lib/steep/ast/types/factory.rb +535 -0
- data/lib/steep/ast/types/name.rb +3 -3
- data/lib/steep/ast/types/var.rb +1 -1
- data/lib/steep/cli.rb +56 -240
- data/lib/steep/drivers/annotations.rb +36 -19
- data/lib/steep/drivers/check.rb +55 -91
- data/lib/steep/drivers/init.rb +54 -0
- data/lib/steep/drivers/langserver.rb +241 -150
- data/lib/steep/drivers/print_project.rb +56 -0
- data/lib/steep/drivers/signature_error_printer.rb +25 -0
- data/lib/steep/drivers/trace_printer.rb +25 -0
- data/lib/steep/drivers/utils/driver_helper.rb +26 -0
- data/lib/steep/drivers/validate.rb +18 -38
- data/lib/steep/drivers/vendor.rb +46 -0
- data/lib/steep/drivers/watch.rb +78 -140
- data/lib/steep/errors.rb +22 -13
- data/lib/steep/interface/interface.rb +91 -0
- data/lib/steep/interface/method.rb +0 -4
- data/lib/steep/interface/method_type.rb +362 -2
- data/lib/steep/interface/substitution.rb +22 -0
- data/lib/steep/project.rb +25 -233
- data/lib/steep/project/dsl.rb +132 -0
- data/lib/steep/project/file.rb +93 -76
- data/lib/steep/project/file_loader.rb +63 -0
- data/lib/steep/project/options.rb +7 -0
- data/lib/steep/project/target.rb +190 -0
- data/lib/steep/signature/errors.rb +25 -77
- data/lib/steep/signature/validator.rb +122 -0
- data/lib/steep/source.rb +12 -7
- data/lib/steep/subtyping/check.rb +357 -633
- data/lib/steep/subtyping/constraints.rb +2 -2
- data/lib/steep/subtyping/trace.rb +23 -0
- data/lib/steep/type_construction.rb +509 -455
- data/lib/steep/type_inference/constant_env.rb +16 -24
- data/lib/steep/type_inference/type_env.rb +26 -18
- data/lib/steep/version.rb +1 -1
- data/sample/Steepfile +6 -0
- data/sample/lib/conference.rb +12 -0
- data/sample/sig/conference.rbs +6 -0
- data/smoke/alias/Steepfile +4 -0
- data/smoke/alias/a.rb +2 -2
- data/smoke/alias/{a.rbi → a.rbs} +1 -1
- data/smoke/and/Steepfile +4 -0
- data/smoke/array/Steepfile +4 -0
- data/smoke/array/a.rb +2 -2
- data/smoke/array/b.rb +4 -4
- data/smoke/array/c.rb +2 -2
- data/smoke/block/Steepfile +5 -0
- data/smoke/block/{a.rbi → a.rbs} +1 -1
- data/smoke/block/{c.rbi → c.rbs} +0 -0
- data/smoke/block/d.rb +6 -6
- data/smoke/case/Steepfile +4 -0
- data/smoke/case/a.rb +4 -3
- data/smoke/class/Steepfile +4 -0
- data/smoke/class/a.rb +1 -4
- data/smoke/class/a.rbs +24 -0
- data/smoke/class/h.rb +6 -2
- data/smoke/class/{h.rbi → h.rbs} +1 -2
- data/smoke/class/i.rb +1 -2
- data/smoke/class/i.rbs +9 -0
- data/smoke/const/Steepfile +4 -0
- data/smoke/dstr/Steepfile +4 -0
- data/smoke/ensure/Steepfile +4 -0
- data/smoke/ensure/a.rb +1 -1
- data/smoke/enumerator/Steepfile +4 -0
- data/smoke/enumerator/a.rb +7 -7
- data/smoke/enumerator/b.rb +6 -6
- data/smoke/extension/Steepfile +4 -0
- data/smoke/extension/{a.rbi → a.rbs} +2 -2
- data/smoke/extension/{e.rbi → e.rbs} +2 -2
- data/smoke/hash/Steepfile +4 -0
- data/smoke/hash/{a.rbi → a.rbs} +0 -0
- data/smoke/hash/b.rb +2 -2
- data/smoke/hash/c.rb +1 -1
- data/smoke/hash/e.rbs +3 -0
- data/smoke/hash/f.rb +1 -1
- data/smoke/hello/Steepfile +4 -0
- data/smoke/hello/hello.rbs +7 -0
- data/smoke/if/Steepfile +4 -0
- data/smoke/implements/Steepfile +4 -0
- data/smoke/implements/a.rbs +6 -0
- data/smoke/initialize/Steepfile +4 -0
- data/smoke/initialize/a.rbs +3 -0
- data/smoke/integer/Steepfile +4 -0
- data/smoke/integer/a.rb +5 -3
- data/smoke/interface/Steepfile +4 -0
- data/smoke/interface/{a.rbi → a.rbs} +0 -0
- data/smoke/kwbegin/Steepfile +4 -0
- data/smoke/lambda/Steepfile +4 -0
- data/smoke/lambda/a.rb +9 -2
- data/smoke/literal/Steepfile +4 -0
- data/smoke/literal/{literal_methods.rbi → literal_methods.rbs} +0 -0
- data/smoke/map/Steepfile +4 -0
- data/smoke/map/a.rb +1 -1
- data/smoke/method/Steepfile +4 -0
- data/smoke/method/{a.rbi → a.rbs} +0 -0
- data/smoke/method/b.rb +1 -4
- data/smoke/method/d.rb +1 -0
- data/smoke/method/d.rbs +3 -0
- data/smoke/module/Steepfile +4 -0
- data/smoke/module/a.rb +1 -1
- data/smoke/module/a.rbs +16 -0
- data/smoke/module/c.rb +1 -1
- data/smoke/regexp/Steepfile +4 -0
- data/smoke/regexp/a.rb +2 -2
- data/smoke/regexp/b.rb +16 -16
- data/smoke/regression/Steepfile +5 -0
- data/smoke/regression/array.rb +2 -2
- data/smoke/regression/hash.rb +2 -2
- data/smoke/regression/poly_new.rb +2 -0
- data/smoke/regression/poly_new.rbs +4 -0
- data/smoke/regression/set_divide.rb +2 -2
- data/smoke/rescue/Steepfile +4 -0
- data/smoke/rescue/a.rb +1 -1
- data/smoke/self/Steepfile +4 -0
- data/smoke/self/a.rbs +4 -0
- data/smoke/skip/Steepfile +4 -0
- data/smoke/stdout/Steepfile +4 -0
- data/smoke/stdout/{a.rbi → a.rbs} +1 -1
- data/smoke/super/Steepfile +4 -0
- data/smoke/super/a.rbs +10 -0
- data/smoke/type_case/Steepfile +4 -0
- data/smoke/type_case/a.rb +1 -1
- data/smoke/yield/Steepfile +4 -0
- data/smoke/yield/a.rb +2 -2
- data/steep.gemspec +14 -7
- data/vendor/ruby-signature/.github/workflows/ruby.yml +27 -0
- data/vendor/ruby-signature/.gitignore +12 -0
- data/vendor/ruby-signature/.rubocop.yml +15 -0
- data/vendor/ruby-signature/BSDL +22 -0
- data/vendor/ruby-signature/COPYING +56 -0
- data/vendor/ruby-signature/Gemfile +6 -0
- data/vendor/ruby-signature/README.md +93 -0
- data/vendor/ruby-signature/Rakefile +66 -0
- data/vendor/ruby-signature/bin/annotate-with-rdoc +156 -0
- data/vendor/ruby-signature/bin/console +14 -0
- data/vendor/ruby-signature/bin/query-rdoc +103 -0
- data/vendor/ruby-signature/bin/setup +10 -0
- data/vendor/ruby-signature/bin/sort +88 -0
- data/vendor/ruby-signature/bin/test_runner.rb +17 -0
- data/vendor/ruby-signature/docs/CONTRIBUTING.md +97 -0
- data/vendor/ruby-signature/docs/sigs.md +148 -0
- data/vendor/ruby-signature/docs/stdlib.md +152 -0
- data/vendor/ruby-signature/docs/syntax.md +528 -0
- data/vendor/ruby-signature/exe/rbs +3 -0
- data/vendor/ruby-signature/exe/ruby-signature +7 -0
- data/vendor/ruby-signature/lib/ruby/signature.rb +64 -0
- data/vendor/ruby-signature/lib/ruby/signature/ast/annotation.rb +29 -0
- data/vendor/ruby-signature/lib/ruby/signature/ast/comment.rb +29 -0
- data/vendor/ruby-signature/lib/ruby/signature/ast/declarations.rb +391 -0
- data/vendor/ruby-signature/lib/ruby/signature/ast/members.rb +364 -0
- data/vendor/ruby-signature/lib/ruby/signature/buffer.rb +52 -0
- data/vendor/ruby-signature/lib/ruby/signature/builtin_names.rb +54 -0
- data/vendor/ruby-signature/lib/ruby/signature/cli.rb +534 -0
- data/vendor/ruby-signature/lib/ruby/signature/constant.rb +28 -0
- data/vendor/ruby-signature/lib/ruby/signature/constant_table.rb +152 -0
- data/vendor/ruby-signature/lib/ruby/signature/definition.rb +172 -0
- data/vendor/ruby-signature/lib/ruby/signature/definition_builder.rb +921 -0
- data/vendor/ruby-signature/lib/ruby/signature/environment.rb +283 -0
- data/vendor/ruby-signature/lib/ruby/signature/environment_loader.rb +138 -0
- data/vendor/ruby-signature/lib/ruby/signature/environment_walker.rb +126 -0
- data/vendor/ruby-signature/lib/ruby/signature/errors.rb +189 -0
- data/vendor/ruby-signature/lib/ruby/signature/location.rb +104 -0
- data/vendor/ruby-signature/lib/ruby/signature/method_type.rb +125 -0
- data/vendor/ruby-signature/lib/ruby/signature/namespace.rb +93 -0
- data/vendor/ruby-signature/lib/ruby/signature/parser.y +1343 -0
- data/vendor/ruby-signature/lib/ruby/signature/prototype/rb.rb +441 -0
- data/vendor/ruby-signature/lib/ruby/signature/prototype/rbi.rb +579 -0
- data/vendor/ruby-signature/lib/ruby/signature/prototype/runtime.rb +383 -0
- data/vendor/ruby-signature/lib/ruby/signature/substitution.rb +48 -0
- data/vendor/ruby-signature/lib/ruby/signature/test.rb +28 -0
- data/vendor/ruby-signature/lib/ruby/signature/test/errors.rb +63 -0
- data/vendor/ruby-signature/lib/ruby/signature/test/hook.rb +290 -0
- data/vendor/ruby-signature/lib/ruby/signature/test/setup.rb +58 -0
- data/vendor/ruby-signature/lib/ruby/signature/test/spy.rb +324 -0
- data/vendor/ruby-signature/lib/ruby/signature/test/test_helper.rb +185 -0
- data/vendor/ruby-signature/lib/ruby/signature/test/type_check.rb +256 -0
- data/vendor/ruby-signature/lib/ruby/signature/type_name.rb +72 -0
- data/vendor/ruby-signature/lib/ruby/signature/types.rb +932 -0
- data/vendor/ruby-signature/lib/ruby/signature/variance_calculator.rb +140 -0
- data/vendor/ruby-signature/lib/ruby/signature/vendorer.rb +49 -0
- data/vendor/ruby-signature/lib/ruby/signature/version.rb +5 -0
- data/vendor/ruby-signature/lib/ruby/signature/writer.rb +271 -0
- data/vendor/ruby-signature/ruby-signature.gemspec +45 -0
- data/vendor/ruby-signature/stdlib/abbrev/abbrev.rbs +3 -0
- data/vendor/ruby-signature/stdlib/base64/base64.rbs +15 -0
- data/vendor/ruby-signature/stdlib/builtin/array.rbs +1997 -0
- data/vendor/ruby-signature/stdlib/builtin/basic_object.rbs +280 -0
- data/vendor/ruby-signature/stdlib/builtin/binding.rbs +177 -0
- data/vendor/ruby-signature/stdlib/builtin/builtin.rbs +35 -0
- data/vendor/ruby-signature/stdlib/builtin/class.rbs +145 -0
- data/vendor/ruby-signature/stdlib/builtin/comparable.rbs +116 -0
- data/vendor/ruby-signature/stdlib/builtin/complex.rbs +400 -0
- data/vendor/ruby-signature/stdlib/builtin/constants.rbs +37 -0
- data/vendor/ruby-signature/stdlib/builtin/data.rbs +5 -0
- data/vendor/ruby-signature/stdlib/builtin/deprecated.rbs +2 -0
- data/vendor/ruby-signature/stdlib/builtin/dir.rbs +419 -0
- data/vendor/ruby-signature/stdlib/builtin/encoding.rbs +606 -0
- data/vendor/ruby-signature/stdlib/builtin/enumerable.rbs +404 -0
- data/vendor/ruby-signature/stdlib/builtin/enumerator.rbs +260 -0
- data/vendor/ruby-signature/stdlib/builtin/errno.rbs +781 -0
- data/vendor/ruby-signature/stdlib/builtin/errors.rbs +582 -0
- data/vendor/ruby-signature/stdlib/builtin/exception.rbs +193 -0
- data/vendor/ruby-signature/stdlib/builtin/false_class.rbs +40 -0
- data/vendor/ruby-signature/stdlib/builtin/fiber.rbs +68 -0
- data/vendor/ruby-signature/stdlib/builtin/fiber_error.rbs +12 -0
- data/vendor/ruby-signature/stdlib/builtin/file.rbs +476 -0
- data/vendor/ruby-signature/stdlib/builtin/file_test.rbs +59 -0
- data/vendor/ruby-signature/stdlib/builtin/float.rbs +696 -0
- data/vendor/ruby-signature/stdlib/builtin/gc.rbs +121 -0
- data/vendor/ruby-signature/stdlib/builtin/hash.rbs +1029 -0
- data/vendor/ruby-signature/stdlib/builtin/integer.rbs +710 -0
- data/vendor/ruby-signature/stdlib/builtin/io.rbs +683 -0
- data/vendor/ruby-signature/stdlib/builtin/kernel.rbs +574 -0
- data/vendor/ruby-signature/stdlib/builtin/marshal.rbs +135 -0
- data/vendor/ruby-signature/stdlib/builtin/match_data.rbs +141 -0
- data/vendor/ruby-signature/stdlib/builtin/math.rbs +66 -0
- data/vendor/ruby-signature/stdlib/builtin/method.rbs +182 -0
- data/vendor/ruby-signature/stdlib/builtin/module.rbs +248 -0
- data/vendor/ruby-signature/stdlib/builtin/nil_class.rbs +82 -0
- data/vendor/ruby-signature/stdlib/builtin/numeric.rbs +409 -0
- data/vendor/ruby-signature/stdlib/builtin/object.rbs +824 -0
- data/vendor/ruby-signature/stdlib/builtin/proc.rbs +426 -0
- data/vendor/ruby-signature/stdlib/builtin/process.rbs +354 -0
- data/vendor/ruby-signature/stdlib/builtin/random.rbs +93 -0
- data/vendor/ruby-signature/stdlib/builtin/range.rbs +226 -0
- data/vendor/ruby-signature/stdlib/builtin/rational.rbs +424 -0
- data/vendor/ruby-signature/stdlib/builtin/rb_config.rbs +10 -0
- data/vendor/ruby-signature/stdlib/builtin/regexp.rbs +131 -0
- data/vendor/ruby-signature/stdlib/builtin/ruby_vm.rbs +14 -0
- data/vendor/ruby-signature/stdlib/builtin/signal.rbs +55 -0
- data/vendor/ruby-signature/stdlib/builtin/string.rbs +770 -0
- data/vendor/ruby-signature/stdlib/builtin/string_io.rbs +13 -0
- data/vendor/ruby-signature/stdlib/builtin/struct.rbs +40 -0
- data/vendor/ruby-signature/stdlib/builtin/symbol.rbs +230 -0
- data/vendor/ruby-signature/stdlib/builtin/thread.rbs +1112 -0
- data/vendor/ruby-signature/stdlib/builtin/thread_group.rbs +23 -0
- data/vendor/ruby-signature/stdlib/builtin/time.rbs +739 -0
- data/vendor/ruby-signature/stdlib/builtin/trace_point.rbs +91 -0
- data/vendor/ruby-signature/stdlib/builtin/true_class.rbs +46 -0
- data/vendor/ruby-signature/stdlib/builtin/unbound_method.rbs +159 -0
- data/vendor/ruby-signature/stdlib/builtin/warning.rbs +17 -0
- data/vendor/ruby-signature/stdlib/erb/erb.rbs +18 -0
- data/vendor/ruby-signature/stdlib/find/find.rbs +44 -0
- data/vendor/ruby-signature/stdlib/pathname/pathname.rbs +21 -0
- data/vendor/ruby-signature/stdlib/prime/integer-extension.rbs +23 -0
- data/vendor/ruby-signature/stdlib/prime/prime.rbs +188 -0
- data/vendor/ruby-signature/stdlib/securerandom/securerandom.rbs +9 -0
- data/vendor/ruby-signature/stdlib/set/set.rbs +77 -0
- data/vendor/ruby-signature/stdlib/tmpdir/tmpdir.rbs +53 -0
- metadata +244 -54
- data/.travis.yml +0 -7
- data/lib/steep/ast/signature/alias.rb +0 -19
- data/lib/steep/ast/signature/class.rb +0 -33
- data/lib/steep/ast/signature/const.rb +0 -17
- data/lib/steep/ast/signature/env.rb +0 -138
- data/lib/steep/ast/signature/extension.rb +0 -21
- data/lib/steep/ast/signature/gvar.rb +0 -17
- data/lib/steep/ast/signature/interface.rb +0 -31
- data/lib/steep/ast/signature/members.rb +0 -115
- data/lib/steep/ast/signature/module.rb +0 -21
- data/lib/steep/drivers/print_interface.rb +0 -94
- data/lib/steep/drivers/scaffold.rb +0 -321
- data/lib/steep/drivers/utils/each_signature.rb +0 -31
- data/lib/steep/interface/abstract.rb +0 -68
- data/lib/steep/interface/builder.rb +0 -637
- data/lib/steep/interface/instantiated.rb +0 -163
- data/lib/steep/interface/ivar_chain.rb +0 -26
- data/lib/steep/parser.y +0 -1278
- data/lib/steep/project/listener.rb +0 -53
- data/smoke/class/a.rbi +0 -24
- data/smoke/class/d.rb +0 -9
- data/smoke/class/e.rb +0 -12
- data/smoke/class/i.rbi +0 -9
- data/smoke/hash/e.rbi +0 -3
- data/smoke/hello/hello.rbi +0 -7
- data/smoke/implements/a.rbi +0 -6
- data/smoke/initialize/a.rbi +0 -3
- data/smoke/module/a.rbi +0 -16
- data/smoke/self/a.rbi +0 -4
- data/smoke/super/a.rbi +0 -10
- data/stdlib/builtin.rbi +0 -787
@@ -0,0 +1,248 @@
|
|
1
|
+
# A `Module` is a collection of methods and constants. The methods in a
|
2
|
+
# module may be instance methods or module methods. Instance methods
|
3
|
+
# appear as methods in a class when the module is included, module methods
|
4
|
+
# do not. Conversely, module methods may be called without creating an
|
5
|
+
# encapsulating object, while instance methods may not. (See
|
6
|
+
# `Module#module_function` .)
|
7
|
+
#
|
8
|
+
# In the descriptions that follow, the parameter *sym* refers to a symbol,
|
9
|
+
# which is either a quoted string or a `Symbol` (such as `:name` ).
|
10
|
+
#
|
11
|
+
# ```ruby
|
12
|
+
# module Mod
|
13
|
+
# include Math
|
14
|
+
# CONST = 1
|
15
|
+
# def meth
|
16
|
+
# # ...
|
17
|
+
# end
|
18
|
+
# end
|
19
|
+
# Mod.class #=> Module
|
20
|
+
# Mod.constants #=> [:CONST, :PI, :E]
|
21
|
+
# Mod.instance_methods #=> [:meth]
|
22
|
+
# ```
|
23
|
+
class Module < Object
|
24
|
+
# In the first form, returns an array of the names of all constants
|
25
|
+
# accessible from the point of call. This list includes the names of all
|
26
|
+
# modules and classes defined in the global scope.
|
27
|
+
#
|
28
|
+
# ```ruby
|
29
|
+
# Module.constants.first(4)
|
30
|
+
# # => [:ARGF, :ARGV, :ArgumentError, :Array]
|
31
|
+
#
|
32
|
+
# Module.constants.include?(:SEEK_SET) # => false
|
33
|
+
#
|
34
|
+
# class IO
|
35
|
+
# Module.constants.include?(:SEEK_SET) # => true
|
36
|
+
# end
|
37
|
+
# ```
|
38
|
+
#
|
39
|
+
# The second form calls the instance method `constants` .
|
40
|
+
def self.constants: () -> ::Array[Integer]
|
41
|
+
|
42
|
+
# Returns the list of `Modules` nested at the point of call.
|
43
|
+
#
|
44
|
+
# ```ruby
|
45
|
+
# module M1
|
46
|
+
# module M2
|
47
|
+
# $a = Module.nesting
|
48
|
+
# end
|
49
|
+
# end
|
50
|
+
# $a #=> [M1::M2, M1]
|
51
|
+
# $a[0].name #=> "M1::M2"
|
52
|
+
# ```
|
53
|
+
def self.nesting: () -> ::Array[Module]
|
54
|
+
|
55
|
+
def self.used_modules: () -> ::Array[Module]
|
56
|
+
|
57
|
+
def <: (Module other) -> bool?
|
58
|
+
|
59
|
+
def <=: (Module other) -> bool?
|
60
|
+
|
61
|
+
def <=>: (Module other) -> Integer?
|
62
|
+
|
63
|
+
def ==: (untyped other) -> bool
|
64
|
+
|
65
|
+
def ===: (untyped other) -> bool
|
66
|
+
|
67
|
+
def >: (Module other) -> bool?
|
68
|
+
|
69
|
+
def >=: (Module other) -> bool?
|
70
|
+
|
71
|
+
def alias_method: (Symbol new_name, Symbol old_name) -> self
|
72
|
+
|
73
|
+
# Returns a list of modules included/prepended in *mod* (including *mod*
|
74
|
+
# itself).
|
75
|
+
#
|
76
|
+
# ```ruby
|
77
|
+
# module Mod
|
78
|
+
# include Math
|
79
|
+
# include Comparable
|
80
|
+
# prepend Enumerable
|
81
|
+
# end
|
82
|
+
#
|
83
|
+
# Mod.ancestors #=> [Enumerable, Mod, Comparable, Math]
|
84
|
+
# Math.ancestors #=> [Math]
|
85
|
+
# Enumerable.ancestors #=> [Enumerable]
|
86
|
+
# ```
|
87
|
+
def ancestors: () -> ::Array[Module]
|
88
|
+
|
89
|
+
def append_features: (Module arg0) -> self
|
90
|
+
|
91
|
+
def `attr_accessor`: (*Symbol | String arg0) -> NilClass
|
92
|
+
|
93
|
+
def `attr_reader`: (*Symbol | String arg0) -> NilClass
|
94
|
+
|
95
|
+
def `attr_writer`: (*Symbol | String arg0) -> NilClass
|
96
|
+
|
97
|
+
def autoload: (Symbol _module, String filename) -> NilClass
|
98
|
+
|
99
|
+
def autoload?: (Symbol name) -> String?
|
100
|
+
|
101
|
+
def class_eval: (String arg0, ?String filename, ?Integer lineno) -> untyped
|
102
|
+
| [U] (untyped arg0) { (untyped m) -> U } -> U
|
103
|
+
|
104
|
+
def class_exec: (*untyped args) { () -> untyped } -> untyped
|
105
|
+
|
106
|
+
def class_variable_defined?: (Symbol | String arg0) -> bool
|
107
|
+
|
108
|
+
def class_variable_get: (Symbol | String arg0) -> untyped
|
109
|
+
|
110
|
+
def class_variable_set: (Symbol | String arg0, untyped arg1) -> untyped
|
111
|
+
|
112
|
+
def class_variables: (?bool inherit) -> ::Array[Symbol]
|
113
|
+
|
114
|
+
def const_defined?: (Symbol | String arg0, ?bool inherit) -> bool
|
115
|
+
|
116
|
+
def const_get: (Symbol | String arg0, ?bool inherit) -> untyped
|
117
|
+
|
118
|
+
def const_missing: (Symbol arg0) -> untyped
|
119
|
+
|
120
|
+
def const_set: (Symbol | String arg0, untyped arg1) -> untyped
|
121
|
+
|
122
|
+
def constants: (?bool inherit) -> ::Array[Symbol]
|
123
|
+
|
124
|
+
def define_method: (Symbol | String arg0, ?Proc | Method | UnboundMethod arg1) -> Symbol
|
125
|
+
| (Symbol | String arg0) { () -> untyped } -> Symbol
|
126
|
+
|
127
|
+
def eql?: (untyped other) -> bool
|
128
|
+
|
129
|
+
def equal?: (untyped other) -> bool
|
130
|
+
|
131
|
+
def extend_object: (untyped arg0) -> untyped
|
132
|
+
|
133
|
+
def extended: (Module othermod) -> untyped
|
134
|
+
|
135
|
+
# Prevents further modifications to *mod* .
|
136
|
+
#
|
137
|
+
# This method returns self.
|
138
|
+
def freeze: () -> self
|
139
|
+
|
140
|
+
def `include`: (*Module arg0) -> self
|
141
|
+
|
142
|
+
def `include?`: (Module arg0) -> bool
|
143
|
+
|
144
|
+
def included: (Module othermod) -> untyped
|
145
|
+
|
146
|
+
# Returns the list of modules included in *mod* .
|
147
|
+
#
|
148
|
+
# ```ruby
|
149
|
+
# module Mixin
|
150
|
+
# end
|
151
|
+
#
|
152
|
+
# module Outer
|
153
|
+
# include Mixin
|
154
|
+
# end
|
155
|
+
#
|
156
|
+
# Mixin.included_modules #=> []
|
157
|
+
# Outer.included_modules #=> [Mixin]
|
158
|
+
# ```
|
159
|
+
def included_modules: () -> ::Array[Module]
|
160
|
+
|
161
|
+
def initialize: () -> Object
|
162
|
+
| () { (Module arg0) -> untyped } -> void
|
163
|
+
|
164
|
+
def instance_method: (Symbol arg0) -> UnboundMethod
|
165
|
+
|
166
|
+
def instance_methods: (?bool include_super) -> ::Array[Symbol]
|
167
|
+
|
168
|
+
def method_added: (Symbol meth) -> untyped
|
169
|
+
|
170
|
+
def method_defined?: (Symbol | String arg0) -> bool
|
171
|
+
|
172
|
+
def method_removed: (Symbol method_name) -> untyped
|
173
|
+
|
174
|
+
def module_eval: (String arg0, ?String filename, ?Integer lineno) -> untyped
|
175
|
+
| [U] (untyped arg0) { (untyped m) -> U } -> U
|
176
|
+
|
177
|
+
def module_exec: (*untyped args) { () -> untyped } -> untyped
|
178
|
+
|
179
|
+
def module_function: (*Symbol | String arg0) -> self
|
180
|
+
|
181
|
+
# Returns the name of the module *mod* . Returns nil for anonymous
|
182
|
+
# modules.
|
183
|
+
def name: () -> String?
|
184
|
+
|
185
|
+
def `prepend`: (*Module arg0) -> self
|
186
|
+
|
187
|
+
def prepend_features: (Module arg0) -> self
|
188
|
+
|
189
|
+
def prepended: (Module othermod) -> untyped
|
190
|
+
|
191
|
+
def `private`: (*Symbol | String arg0) -> self
|
192
|
+
|
193
|
+
def private_class_method: (*Symbol | String arg0) -> self
|
194
|
+
|
195
|
+
def private_constant: (*Symbol arg0) -> self
|
196
|
+
|
197
|
+
def private_instance_methods: (?bool include_super) -> ::Array[Symbol]
|
198
|
+
|
199
|
+
def private_method_defined?: (Symbol | String arg0) -> bool
|
200
|
+
|
201
|
+
def protected: (*Symbol | String arg0) -> self
|
202
|
+
|
203
|
+
def protected_instance_methods: (?bool include_super) -> ::Array[Symbol]
|
204
|
+
|
205
|
+
def protected_method_defined?: (Symbol | String arg0) -> bool
|
206
|
+
|
207
|
+
def `public`: (*Symbol | String arg0) -> self
|
208
|
+
|
209
|
+
def public_class_method: (*Symbol | String arg0) -> self
|
210
|
+
|
211
|
+
def public_constant: (*Symbol arg0) -> self
|
212
|
+
|
213
|
+
def public_instance_method: (Symbol arg0) -> UnboundMethod
|
214
|
+
|
215
|
+
def public_instance_methods: (?bool include_super) -> ::Array[Symbol]
|
216
|
+
|
217
|
+
def public_method_defined?: (Symbol | String arg0) -> bool
|
218
|
+
|
219
|
+
def refine: (Class arg0) { (untyped arg0) -> untyped } -> self
|
220
|
+
|
221
|
+
def remove_class_variable: (Symbol arg0) -> untyped
|
222
|
+
|
223
|
+
def remove_const: (Symbol arg0) -> untyped
|
224
|
+
|
225
|
+
def remove_method: (Symbol | String arg0) -> self
|
226
|
+
|
227
|
+
# Returns `true` if *mod* is a singleton class or `false` if it is an
|
228
|
+
# ordinary class or module.
|
229
|
+
#
|
230
|
+
# ```ruby
|
231
|
+
# class C
|
232
|
+
# end
|
233
|
+
# C.singleton_class? #=> false
|
234
|
+
# C.singleton_class.singleton_class? #=> true
|
235
|
+
# ```
|
236
|
+
def `singleton_class?`: () -> bool
|
237
|
+
|
238
|
+
def to_s: () -> String
|
239
|
+
|
240
|
+
def undefMethod: (Symbol | String arg0) -> self
|
241
|
+
|
242
|
+
def using: (Module arg0) -> self
|
243
|
+
|
244
|
+
# Alias for: [to\_s](Module.downloaded.ruby_doc#method-i-to_s)
|
245
|
+
def inspect: () -> String
|
246
|
+
|
247
|
+
def attr: (*Symbol | String arg0) -> NilClass
|
248
|
+
end
|
@@ -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
|