rbs 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.github/workflows/ruby.yml +28 -0
- data/.gitignore +12 -0
- data/.rubocop.yml +15 -0
- data/BSDL +22 -0
- data/CHANGELOG.md +9 -0
- data/COPYING +56 -0
- data/Gemfile +6 -0
- data/README.md +93 -0
- data/Rakefile +142 -0
- data/bin/annotate-with-rdoc +157 -0
- data/bin/console +14 -0
- data/bin/query-rdoc +103 -0
- data/bin/setup +10 -0
- data/bin/sort +89 -0
- data/bin/test_runner.rb +16 -0
- data/docs/CONTRIBUTING.md +97 -0
- data/docs/sigs.md +148 -0
- data/docs/stdlib.md +152 -0
- data/docs/syntax.md +528 -0
- data/exe/rbs +7 -0
- data/lib/rbs.rb +64 -0
- data/lib/rbs/ast/annotation.rb +27 -0
- data/lib/rbs/ast/comment.rb +27 -0
- data/lib/rbs/ast/declarations.rb +395 -0
- data/lib/rbs/ast/members.rb +362 -0
- data/lib/rbs/buffer.rb +50 -0
- data/lib/rbs/builtin_names.rb +55 -0
- data/lib/rbs/cli.rb +558 -0
- data/lib/rbs/constant.rb +26 -0
- data/lib/rbs/constant_table.rb +150 -0
- data/lib/rbs/definition.rb +170 -0
- data/lib/rbs/definition_builder.rb +919 -0
- data/lib/rbs/environment.rb +281 -0
- data/lib/rbs/environment_loader.rb +136 -0
- data/lib/rbs/environment_walker.rb +124 -0
- data/lib/rbs/errors.rb +187 -0
- data/lib/rbs/location.rb +102 -0
- data/lib/rbs/method_type.rb +123 -0
- data/lib/rbs/namespace.rb +91 -0
- data/lib/rbs/parser.y +1344 -0
- data/lib/rbs/prototype/rb.rb +553 -0
- data/lib/rbs/prototype/rbi.rb +587 -0
- data/lib/rbs/prototype/runtime.rb +381 -0
- data/lib/rbs/substitution.rb +46 -0
- data/lib/rbs/test.rb +26 -0
- data/lib/rbs/test/errors.rb +61 -0
- data/lib/rbs/test/hook.rb +294 -0
- data/lib/rbs/test/setup.rb +58 -0
- data/lib/rbs/test/spy.rb +325 -0
- data/lib/rbs/test/test_helper.rb +183 -0
- data/lib/rbs/test/type_check.rb +254 -0
- data/lib/rbs/type_name.rb +70 -0
- data/lib/rbs/types.rb +936 -0
- data/lib/rbs/variance_calculator.rb +138 -0
- data/lib/rbs/vendorer.rb +47 -0
- data/lib/rbs/version.rb +3 -0
- data/lib/rbs/writer.rb +269 -0
- data/lib/ruby/signature.rb +7 -0
- data/rbs.gemspec +46 -0
- data/stdlib/abbrev/abbrev.rbs +60 -0
- data/stdlib/base64/base64.rbs +71 -0
- data/stdlib/benchmark/benchmark.rbs +372 -0
- data/stdlib/builtin/array.rbs +1997 -0
- data/stdlib/builtin/basic_object.rbs +280 -0
- data/stdlib/builtin/binding.rbs +177 -0
- data/stdlib/builtin/builtin.rbs +45 -0
- data/stdlib/builtin/class.rbs +145 -0
- data/stdlib/builtin/comparable.rbs +116 -0
- data/stdlib/builtin/complex.rbs +400 -0
- data/stdlib/builtin/constants.rbs +37 -0
- data/stdlib/builtin/data.rbs +5 -0
- data/stdlib/builtin/deprecated.rbs +2 -0
- data/stdlib/builtin/dir.rbs +413 -0
- data/stdlib/builtin/encoding.rbs +607 -0
- data/stdlib/builtin/enumerable.rbs +404 -0
- data/stdlib/builtin/enumerator.rbs +260 -0
- data/stdlib/builtin/errno.rbs +781 -0
- data/stdlib/builtin/errors.rbs +582 -0
- data/stdlib/builtin/exception.rbs +194 -0
- data/stdlib/builtin/false_class.rbs +40 -0
- data/stdlib/builtin/fiber.rbs +68 -0
- data/stdlib/builtin/fiber_error.rbs +12 -0
- data/stdlib/builtin/file.rbs +1076 -0
- data/stdlib/builtin/file_test.rbs +59 -0
- data/stdlib/builtin/float.rbs +696 -0
- data/stdlib/builtin/gc.rbs +243 -0
- data/stdlib/builtin/hash.rbs +1029 -0
- data/stdlib/builtin/integer.rbs +707 -0
- data/stdlib/builtin/io.rbs +683 -0
- data/stdlib/builtin/kernel.rbs +576 -0
- data/stdlib/builtin/marshal.rbs +161 -0
- data/stdlib/builtin/match_data.rbs +271 -0
- data/stdlib/builtin/math.rbs +369 -0
- data/stdlib/builtin/method.rbs +185 -0
- data/stdlib/builtin/module.rbs +1104 -0
- data/stdlib/builtin/nil_class.rbs +82 -0
- data/stdlib/builtin/numeric.rbs +409 -0
- data/stdlib/builtin/object.rbs +824 -0
- data/stdlib/builtin/proc.rbs +429 -0
- data/stdlib/builtin/process.rbs +1227 -0
- data/stdlib/builtin/random.rbs +267 -0
- data/stdlib/builtin/range.rbs +226 -0
- data/stdlib/builtin/rational.rbs +424 -0
- data/stdlib/builtin/rb_config.rbs +57 -0
- data/stdlib/builtin/regexp.rbs +1083 -0
- data/stdlib/builtin/ruby_vm.rbs +14 -0
- data/stdlib/builtin/signal.rbs +55 -0
- data/stdlib/builtin/string.rbs +1901 -0
- data/stdlib/builtin/string_io.rbs +284 -0
- data/stdlib/builtin/struct.rbs +40 -0
- data/stdlib/builtin/symbol.rbs +228 -0
- data/stdlib/builtin/thread.rbs +1108 -0
- data/stdlib/builtin/thread_group.rbs +23 -0
- data/stdlib/builtin/time.rbs +1047 -0
- data/stdlib/builtin/trace_point.rbs +290 -0
- data/stdlib/builtin/true_class.rbs +46 -0
- data/stdlib/builtin/unbound_method.rbs +153 -0
- data/stdlib/builtin/warning.rbs +17 -0
- data/stdlib/coverage/coverage.rbs +62 -0
- data/stdlib/csv/csv.rbs +773 -0
- data/stdlib/erb/erb.rbs +392 -0
- data/stdlib/find/find.rbs +40 -0
- data/stdlib/ipaddr/ipaddr.rbs +247 -0
- data/stdlib/json/json.rbs +335 -0
- data/stdlib/pathname/pathname.rbs +1093 -0
- data/stdlib/prime/integer-extension.rbs +23 -0
- data/stdlib/prime/prime.rbs +188 -0
- data/stdlib/securerandom/securerandom.rbs +9 -0
- data/stdlib/set/set.rbs +301 -0
- data/stdlib/tmpdir/tmpdir.rbs +53 -0
- metadata +292 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# The marshaling library converts collections of Ruby objects into a byte
|
|
2
|
+
# stream, allowing them to be stored outside the currently active script. This
|
|
3
|
+
# data may subsequently be read and the original objects reconstituted.
|
|
4
|
+
#
|
|
5
|
+
# Marshaled data has major and minor version numbers stored along with the
|
|
6
|
+
# object information. In normal use, marshaling can only load data written with
|
|
7
|
+
# the same major version number and an equal or lower minor version number. If
|
|
8
|
+
# Ruby's ``verbose'' flag is set (normally using -d, -v, -w, or --verbose) the
|
|
9
|
+
# major and minor numbers must match exactly. Marshal versioning is independent
|
|
10
|
+
# of Ruby's version numbers. You can extract the version by reading the first
|
|
11
|
+
# two bytes of marshaled data.
|
|
12
|
+
#
|
|
13
|
+
# str = Marshal.dump("thing")
|
|
14
|
+
# RUBY_VERSION #=> "1.9.0"
|
|
15
|
+
# str[0].ord #=> 4
|
|
16
|
+
# str[1].ord #=> 8
|
|
17
|
+
#
|
|
18
|
+
# Some objects cannot be dumped: if the objects to be dumped include bindings,
|
|
19
|
+
# procedure or method objects, instances of class IO, or singleton objects, a
|
|
20
|
+
# TypeError will be raised.
|
|
21
|
+
#
|
|
22
|
+
# If your class has special serialization needs (for example, if you want to
|
|
23
|
+
# serialize in some specific format), or if it contains objects that would
|
|
24
|
+
# otherwise not be serializable, you can implement your own serialization
|
|
25
|
+
# strategy.
|
|
26
|
+
#
|
|
27
|
+
# There are two methods of doing this, your object can define either
|
|
28
|
+
# marshal_dump and marshal_load or _dump and _load. marshal_dump will take
|
|
29
|
+
# precedence over _dump if both are defined. marshal_dump may result in smaller
|
|
30
|
+
# Marshal strings.
|
|
31
|
+
#
|
|
32
|
+
# ## Security considerations
|
|
33
|
+
#
|
|
34
|
+
# By design, Marshal.load can deserialize almost any class loaded into the Ruby
|
|
35
|
+
# process. In many cases this can lead to remote code execution if the Marshal
|
|
36
|
+
# data is loaded from an untrusted source.
|
|
37
|
+
#
|
|
38
|
+
# As a result, Marshal.load is not suitable as a general purpose serialization
|
|
39
|
+
# format and you should never unmarshal user supplied input or other untrusted
|
|
40
|
+
# data.
|
|
41
|
+
#
|
|
42
|
+
# If you need to deserialize untrusted data, use JSON or another serialization
|
|
43
|
+
# format that is only able to load simple, 'primitive' types such as String,
|
|
44
|
+
# Array, Hash, etc. Never allow user input to specify arbitrary types to
|
|
45
|
+
# deserialize into.
|
|
46
|
+
#
|
|
47
|
+
# ## marshal_dump and marshal_load
|
|
48
|
+
#
|
|
49
|
+
# When dumping an object the method marshal_dump will be called. marshal_dump
|
|
50
|
+
# must return a result containing the information necessary for marshal_load to
|
|
51
|
+
# reconstitute the object. The result can be any object.
|
|
52
|
+
#
|
|
53
|
+
# When loading an object dumped using marshal_dump the object is first allocated
|
|
54
|
+
# then marshal_load is called with the result from marshal_dump. marshal_load
|
|
55
|
+
# must recreate the object from the information in the result.
|
|
56
|
+
#
|
|
57
|
+
# Example:
|
|
58
|
+
#
|
|
59
|
+
# class MyObj
|
|
60
|
+
# def initialize name, version, data
|
|
61
|
+
# @name = name
|
|
62
|
+
# @version = version
|
|
63
|
+
# @data = data
|
|
64
|
+
# end
|
|
65
|
+
#
|
|
66
|
+
# def marshal_dump
|
|
67
|
+
# [@name, @version]
|
|
68
|
+
# end
|
|
69
|
+
#
|
|
70
|
+
# def marshal_load array
|
|
71
|
+
# @name, @version = array
|
|
72
|
+
# end
|
|
73
|
+
# end
|
|
74
|
+
#
|
|
75
|
+
# ## _dump and _load
|
|
76
|
+
#
|
|
77
|
+
# Use _dump and _load when you need to allocate the object you're restoring
|
|
78
|
+
# yourself.
|
|
79
|
+
#
|
|
80
|
+
# When dumping an object the instance method _dump is called with an Integer
|
|
81
|
+
# which indicates the maximum depth of objects to dump (a value of -1 implies
|
|
82
|
+
# that you should disable depth checking). _dump must return a String
|
|
83
|
+
# containing the information necessary to reconstitute the object.
|
|
84
|
+
#
|
|
85
|
+
# The class method _load should take a String and use it to return an object of
|
|
86
|
+
# the same class.
|
|
87
|
+
#
|
|
88
|
+
# Example:
|
|
89
|
+
#
|
|
90
|
+
# class MyObj
|
|
91
|
+
# def initialize name, version, data
|
|
92
|
+
# @name = name
|
|
93
|
+
# @version = version
|
|
94
|
+
# @data = data
|
|
95
|
+
# end
|
|
96
|
+
#
|
|
97
|
+
# def _dump level
|
|
98
|
+
# [@name, @version].join ':'
|
|
99
|
+
# end
|
|
100
|
+
#
|
|
101
|
+
# def self._load args
|
|
102
|
+
# new(*args.split(':'))
|
|
103
|
+
# end
|
|
104
|
+
# end
|
|
105
|
+
#
|
|
106
|
+
# Since Marshal.dump outputs a string you can have _dump return a Marshal string
|
|
107
|
+
# which is Marshal.loaded in _load for complex objects.
|
|
108
|
+
#
|
|
109
|
+
module Marshal
|
|
110
|
+
# Serializes obj and all descendant objects. If anIO is specified, the
|
|
111
|
+
# serialized data will be written to it, otherwise the data will be returned as
|
|
112
|
+
# a String. If limit is specified, the traversal of subobjects will be limited
|
|
113
|
+
# to that depth. If limit is negative, no checking of depth will be performed.
|
|
114
|
+
#
|
|
115
|
+
# class Klass
|
|
116
|
+
# def initialize(str)
|
|
117
|
+
# @str = str
|
|
118
|
+
# end
|
|
119
|
+
# def say_hello
|
|
120
|
+
# @str
|
|
121
|
+
# end
|
|
122
|
+
# end
|
|
123
|
+
#
|
|
124
|
+
# (produces no output)
|
|
125
|
+
#
|
|
126
|
+
# o = Klass.new("hello\n")
|
|
127
|
+
# data = Marshal.dump(o)
|
|
128
|
+
# obj = Marshal.load(data)
|
|
129
|
+
# obj.say_hello #=> "hello\n"
|
|
130
|
+
#
|
|
131
|
+
# Marshal can't dump following objects:
|
|
132
|
+
# * anonymous Class/Module.
|
|
133
|
+
# * objects which are related to system (ex: Dir, File::Stat, IO, File, Socket
|
|
134
|
+
# and so on)
|
|
135
|
+
# * an instance of MatchData, Data, Method, UnboundMethod, Proc, Thread,
|
|
136
|
+
# ThreadGroup, Continuation
|
|
137
|
+
# * objects which define singleton methods
|
|
138
|
+
#
|
|
139
|
+
def self.dump: (Object arg0, ?IO arg1, ?Integer arg2) -> Object
|
|
140
|
+
| (Object arg0, ?Integer arg1) -> Object
|
|
141
|
+
|
|
142
|
+
# Returns the result of converting the serialized data in source into a Ruby
|
|
143
|
+
# object (possibly with associated subordinate objects). source may be either an
|
|
144
|
+
# instance of IO or an object that responds to to_str. If proc is specified,
|
|
145
|
+
# each object will be passed to the proc, as the object is being deserialized.
|
|
146
|
+
#
|
|
147
|
+
# Never pass untrusted data (including user supplied input) to this method.
|
|
148
|
+
# Please see the overview for further details.
|
|
149
|
+
#
|
|
150
|
+
def self.load: (String arg0, ?Proc arg1) -> Object
|
|
151
|
+
|
|
152
|
+
alias self.restore self.load
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# major version
|
|
156
|
+
#
|
|
157
|
+
Marshal::MAJOR_VERSION: Integer
|
|
158
|
+
|
|
159
|
+
# minor version
|
|
160
|
+
#
|
|
161
|
+
Marshal::MINOR_VERSION: Integer
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
# MatchData encapsulates the result of matching a Regexp against string. It is
|
|
2
|
+
# returned by Regexp#match and String#match, and also stored in a global
|
|
3
|
+
# variable returned by Regexp.last_match.
|
|
4
|
+
#
|
|
5
|
+
# Usage:
|
|
6
|
+
#
|
|
7
|
+
# url = 'https://docs.ruby-lang.org/en/2.5.0/MatchData.html'
|
|
8
|
+
# m = url.match(/(\d\.?)+/) # => #<MatchData "2.5.0" 1:"0">
|
|
9
|
+
# m.string # => "https://docs.ruby-lang.org/en/2.5.0/MatchData.html"
|
|
10
|
+
# m.regexp # => /(\d\.?)+/
|
|
11
|
+
# # entire matched substring:
|
|
12
|
+
# m[0] # => "2.5.0"
|
|
13
|
+
#
|
|
14
|
+
# # Working with unnamed captures
|
|
15
|
+
# m = url.match(%r{([^/]+)/([^/]+)\.html$})
|
|
16
|
+
# m.captures # => ["2.5.0", "MatchData"]
|
|
17
|
+
# m[1] # => "2.5.0"
|
|
18
|
+
# m.values_at(1, 2) # => ["2.5.0", "MatchData"]
|
|
19
|
+
#
|
|
20
|
+
# # Working with named captures
|
|
21
|
+
# m = url.match(%r{(?<version>[^/]+)/(?<module>[^/]+)\.html$})
|
|
22
|
+
# m.captures # => ["2.5.0", "MatchData"]
|
|
23
|
+
# m.named_captures # => {"version"=>"2.5.0", "module"=>"MatchData"}
|
|
24
|
+
# m[:version] # => "2.5.0"
|
|
25
|
+
# m.values_at(:version, :module)
|
|
26
|
+
# # => ["2.5.0", "MatchData"]
|
|
27
|
+
# # Numerical indexes are working, too
|
|
28
|
+
# m[1] # => "2.5.0"
|
|
29
|
+
# m.values_at(1, 2) # => ["2.5.0", "MatchData"]
|
|
30
|
+
#
|
|
31
|
+
# ## Global variables equivalence
|
|
32
|
+
#
|
|
33
|
+
# Parts of last MatchData (returned by Regexp.last_match) are also aliased as
|
|
34
|
+
# global variables:
|
|
35
|
+
#
|
|
36
|
+
# * `$~` is Regexp.last_match;
|
|
37
|
+
# * `$&` is [Regexp.last_match](0);
|
|
38
|
+
# * `$1`, `$2`, and so on are [Regexp.last_match](i) (captures by number);
|
|
39
|
+
# * `$`` is Regexp.last_match`.pre_match`;
|
|
40
|
+
# * `$'` is Regexp.last_match`.post_match`;
|
|
41
|
+
# * `$+` is [Regexp.last_match](-1) (the last capture).
|
|
42
|
+
#
|
|
43
|
+
#
|
|
44
|
+
# See also "Special global variables" section in Regexp documentation.
|
|
45
|
+
#
|
|
46
|
+
class MatchData
|
|
47
|
+
public
|
|
48
|
+
|
|
49
|
+
# Equality---Two matchdata are equal if their target strings, patterns, and
|
|
50
|
+
# matched positions are identical.
|
|
51
|
+
#
|
|
52
|
+
def ==: (untyped other) -> bool
|
|
53
|
+
|
|
54
|
+
# Match Reference -- MatchData acts as an array, and may be accessed using the
|
|
55
|
+
# normal array indexing techniques. `mtch[0]` is equivalent to the special
|
|
56
|
+
# variable `$&`, and returns the entire matched string. `mtch[1]`, `mtch[2]`,
|
|
57
|
+
# and so on return the values of the matched backreferences (portions of the
|
|
58
|
+
# pattern between parentheses).
|
|
59
|
+
#
|
|
60
|
+
# m = /(.)(.)(\d+)(\d)/.match("THX1138.")
|
|
61
|
+
# m #=> #<MatchData "HX1138" 1:"H" 2:"X" 3:"113" 4:"8">
|
|
62
|
+
# m[0] #=> "HX1138"
|
|
63
|
+
# m[1, 2] #=> ["H", "X"]
|
|
64
|
+
# m[1..3] #=> ["H", "X", "113"]
|
|
65
|
+
# m[-3, 2] #=> ["X", "113"]
|
|
66
|
+
#
|
|
67
|
+
# m = /(?<foo>a+)b/.match("ccaaab")
|
|
68
|
+
# m #=> #<MatchData "aaab" foo:"aaa">
|
|
69
|
+
# m["foo"] #=> "aaa"
|
|
70
|
+
# m[:foo] #=> "aaa"
|
|
71
|
+
#
|
|
72
|
+
def []: (Integer idx) -> String?
|
|
73
|
+
| (Integer start, Integer length) -> ::Array[String?]
|
|
74
|
+
| (::Range[Integer] range) -> ::Array[String?]
|
|
75
|
+
| (String | Symbol name) -> String?
|
|
76
|
+
|
|
77
|
+
# Returns the offset of the start of the *n*th element of the match array in the
|
|
78
|
+
# string. *n* can be a string or symbol to reference a named capture.
|
|
79
|
+
#
|
|
80
|
+
# m = /(.)(.)(\d+)(\d)/.match("THX1138.")
|
|
81
|
+
# m.begin(0) #=> 1
|
|
82
|
+
# m.begin(2) #=> 2
|
|
83
|
+
#
|
|
84
|
+
# m = /(?<foo>.)(.)(?<bar>.)/.match("hoge")
|
|
85
|
+
# p m.begin(:foo) #=> 0
|
|
86
|
+
# p m.begin(:bar) #=> 2
|
|
87
|
+
#
|
|
88
|
+
def begin: (Integer | String | Symbol n_or_name) -> Integer?
|
|
89
|
+
|
|
90
|
+
# Returns the array of captures; equivalent to `mtch.to_a[1..-1]`.
|
|
91
|
+
#
|
|
92
|
+
# f1,f2,f3,f4 = /(.)(.)(\d+)(\d)/.match("THX1138.").captures
|
|
93
|
+
# f1 #=> "H"
|
|
94
|
+
# f2 #=> "X"
|
|
95
|
+
# f3 #=> "113"
|
|
96
|
+
# f4 #=> "8"
|
|
97
|
+
#
|
|
98
|
+
def captures: () -> ::Array[String?]
|
|
99
|
+
|
|
100
|
+
# Returns the offset of the character immediately following the end of the *n*th
|
|
101
|
+
# element of the match array in the string. *n* can be a string or symbol to
|
|
102
|
+
# reference a named capture.
|
|
103
|
+
#
|
|
104
|
+
# m = /(.)(.)(\d+)(\d)/.match("THX1138.")
|
|
105
|
+
# m.end(0) #=> 7
|
|
106
|
+
# m.end(2) #=> 3
|
|
107
|
+
#
|
|
108
|
+
# m = /(?<foo>.)(.)(?<bar>.)/.match("hoge")
|
|
109
|
+
# p m.end(:foo) #=> 1
|
|
110
|
+
# p m.end(:bar) #=> 3
|
|
111
|
+
#
|
|
112
|
+
def `end`: (Integer | String | Symbol n_or_name) -> Integer?
|
|
113
|
+
|
|
114
|
+
# Equality---Two matchdata are equal if their target strings, patterns, and
|
|
115
|
+
# matched positions are identical.
|
|
116
|
+
#
|
|
117
|
+
def eql?: (untyped other) -> bool
|
|
118
|
+
|
|
119
|
+
# Produce a hash based on the target string, regexp and matched positions of
|
|
120
|
+
# this matchdata.
|
|
121
|
+
#
|
|
122
|
+
# See also Object#hash.
|
|
123
|
+
#
|
|
124
|
+
def hash: () -> Integer
|
|
125
|
+
|
|
126
|
+
# Returns a printable version of *mtch*.
|
|
127
|
+
#
|
|
128
|
+
# puts /.$/.match("foo").inspect
|
|
129
|
+
# #=> #<MatchData "o">
|
|
130
|
+
#
|
|
131
|
+
# puts /(.)(.)(.)/.match("foo").inspect
|
|
132
|
+
# #=> #<MatchData "foo" 1:"f" 2:"o" 3:"o">
|
|
133
|
+
#
|
|
134
|
+
# puts /(.)(.)?(.)/.match("fo").inspect
|
|
135
|
+
# #=> #<MatchData "fo" 1:"f" 2:nil 3:"o">
|
|
136
|
+
#
|
|
137
|
+
# puts /(?<foo>.)(?<bar>.)(?<baz>.)/.match("hoge").inspect
|
|
138
|
+
# #=> #<MatchData "hog" foo:"h" bar:"o" baz:"g">
|
|
139
|
+
#
|
|
140
|
+
def inspect: () -> String
|
|
141
|
+
|
|
142
|
+
# Returns the number of elements in the match array.
|
|
143
|
+
#
|
|
144
|
+
# m = /(.)(.)(\d+)(\d)/.match("THX1138.")
|
|
145
|
+
# m.length #=> 5
|
|
146
|
+
# m.size #=> 5
|
|
147
|
+
#
|
|
148
|
+
def length: () -> Integer
|
|
149
|
+
|
|
150
|
+
# Returns a Hash using named capture.
|
|
151
|
+
#
|
|
152
|
+
# A key of the hash is a name of the named captures. A value of the hash is a
|
|
153
|
+
# string of last successful capture of corresponding group.
|
|
154
|
+
#
|
|
155
|
+
# m = /(?<a>.)(?<b>.)/.match("01")
|
|
156
|
+
# m.named_captures #=> {"a" => "0", "b" => "1"}
|
|
157
|
+
#
|
|
158
|
+
# m = /(?<a>.)(?<b>.)?/.match("0")
|
|
159
|
+
# m.named_captures #=> {"a" => "0", "b" => nil}
|
|
160
|
+
#
|
|
161
|
+
# m = /(?<a>.)(?<a>.)/.match("01")
|
|
162
|
+
# m.named_captures #=> {"a" => "1"}
|
|
163
|
+
#
|
|
164
|
+
# m = /(?<a>x)|(?<a>y)/.match("x")
|
|
165
|
+
# m.named_captures #=> {"a" => "x"}
|
|
166
|
+
#
|
|
167
|
+
def named_captures: () -> ::Hash[String, String?]
|
|
168
|
+
|
|
169
|
+
# Returns a list of names of captures as an array of strings. It is same as
|
|
170
|
+
# mtch.regexp.names.
|
|
171
|
+
#
|
|
172
|
+
# /(?<foo>.)(?<bar>.)(?<baz>.)/.match("hoge").names
|
|
173
|
+
# #=> ["foo", "bar", "baz"]
|
|
174
|
+
#
|
|
175
|
+
# m = /(?<x>.)(?<y>.)?/.match("a") #=> #<MatchData "a" x:"a" y:nil>
|
|
176
|
+
# m.names #=> ["x", "y"]
|
|
177
|
+
#
|
|
178
|
+
def names: () -> ::Array[String]
|
|
179
|
+
|
|
180
|
+
# Returns a two-element array containing the beginning and ending offsets of the
|
|
181
|
+
# *n*th match. *n* can be a string or symbol to reference a named capture.
|
|
182
|
+
#
|
|
183
|
+
# m = /(.)(.)(\d+)(\d)/.match("THX1138.")
|
|
184
|
+
# m.offset(0) #=> [1, 7]
|
|
185
|
+
# m.offset(4) #=> [6, 7]
|
|
186
|
+
#
|
|
187
|
+
# m = /(?<foo>.)(.)(?<bar>.)/.match("hoge")
|
|
188
|
+
# p m.offset(:foo) #=> [0, 1]
|
|
189
|
+
# p m.offset(:bar) #=> [2, 3]
|
|
190
|
+
#
|
|
191
|
+
def offset: (Integer | Symbol | String n_or_name) -> ([ Integer, Integer ] | [ nil, nil ])
|
|
192
|
+
|
|
193
|
+
# Returns the portion of the original string after the current match. Equivalent
|
|
194
|
+
# to the special variable `$'`.
|
|
195
|
+
#
|
|
196
|
+
# m = /(.)(.)(\d+)(\d)/.match("THX1138: The Movie")
|
|
197
|
+
# m.post_match #=> ": The Movie"
|
|
198
|
+
#
|
|
199
|
+
def post_match: () -> String
|
|
200
|
+
|
|
201
|
+
# Returns the portion of the original string before the current match.
|
|
202
|
+
# Equivalent to the special variable `$``.
|
|
203
|
+
#
|
|
204
|
+
# m = /(.)(.)(\d+)(\d)/.match("THX1138.")
|
|
205
|
+
# m.pre_match #=> "T"
|
|
206
|
+
#
|
|
207
|
+
def pre_match: () -> String
|
|
208
|
+
|
|
209
|
+
# Returns the regexp.
|
|
210
|
+
#
|
|
211
|
+
# m = /a.*b/.match("abc")
|
|
212
|
+
# m.regexp #=> /a.*b/
|
|
213
|
+
#
|
|
214
|
+
def regexp: () -> Regexp
|
|
215
|
+
|
|
216
|
+
# Returns the number of elements in the match array.
|
|
217
|
+
#
|
|
218
|
+
# m = /(.)(.)(\d+)(\d)/.match("THX1138.")
|
|
219
|
+
# m.length #=> 5
|
|
220
|
+
# m.size #=> 5
|
|
221
|
+
#
|
|
222
|
+
def size: () -> Integer
|
|
223
|
+
|
|
224
|
+
# Returns a frozen copy of the string passed in to `match`.
|
|
225
|
+
#
|
|
226
|
+
# m = /(.)(.)(\d+)(\d)/.match("THX1138.")
|
|
227
|
+
# m.string #=> "THX1138."
|
|
228
|
+
#
|
|
229
|
+
def string: () -> String
|
|
230
|
+
|
|
231
|
+
# Returns the array of matches.
|
|
232
|
+
#
|
|
233
|
+
# m = /(.)(.)(\d+)(\d)/.match("THX1138.")
|
|
234
|
+
# m.to_a #=> ["HX1138", "H", "X", "113", "8"]
|
|
235
|
+
#
|
|
236
|
+
# Because `to_a` is called when expanding `*`*variable*, there's a useful
|
|
237
|
+
# assignment shortcut for extracting matched fields. This is slightly slower
|
|
238
|
+
# than accessing the fields directly (as an intermediate array is generated).
|
|
239
|
+
#
|
|
240
|
+
# all,f1,f2,f3 = * /(.)(.)(\d+)(\d)/.match("THX1138.")
|
|
241
|
+
# all #=> "HX1138"
|
|
242
|
+
# f1 #=> "H"
|
|
243
|
+
# f2 #=> "X"
|
|
244
|
+
# f3 #=> "113"
|
|
245
|
+
#
|
|
246
|
+
def to_a: () -> ::Array[String?]
|
|
247
|
+
|
|
248
|
+
# Returns the entire matched string.
|
|
249
|
+
#
|
|
250
|
+
# m = /(.)(.)(\d+)(\d)/.match("THX1138.")
|
|
251
|
+
# m.to_s #=> "HX1138"
|
|
252
|
+
#
|
|
253
|
+
def to_s: () -> String
|
|
254
|
+
|
|
255
|
+
# Uses each *index* to access the matching values, returning an array of the
|
|
256
|
+
# corresponding matches.
|
|
257
|
+
#
|
|
258
|
+
# m = /(.)(.)(\d+)(\d)/.match("THX1138: The Movie")
|
|
259
|
+
# m.to_a #=> ["HX1138", "H", "X", "113", "8"]
|
|
260
|
+
# m.values_at(0, 2, -2) #=> ["HX1138", "X", "113"]
|
|
261
|
+
#
|
|
262
|
+
# m = /(?<a>\d+) *(?<op>[+\-*\/]) *(?<b>\d+)/.match("1 + 2")
|
|
263
|
+
# m.to_a #=> ["1 + 2", "1", "+", "2"]
|
|
264
|
+
# m.values_at(:a, :b, :op) #=> ["1", "2", "+"]
|
|
265
|
+
#
|
|
266
|
+
def values_at: (*Integer | Symbol | String n_or_name) -> ::Array[String?]
|
|
267
|
+
|
|
268
|
+
private
|
|
269
|
+
|
|
270
|
+
def initialize_copy: (self object) -> void
|
|
271
|
+
end
|
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
# The Math module contains module functions for basic trigonometric and
|
|
2
|
+
# transcendental functions. See class Float for a list of constants that define
|
|
3
|
+
# Ruby's floating point accuracy.
|
|
4
|
+
#
|
|
5
|
+
# Domains and codomains are given only for real (not complex) numbers.
|
|
6
|
+
#
|
|
7
|
+
module Math
|
|
8
|
+
# Computes the arc cosine of `x`. Returns 0..PI.
|
|
9
|
+
#
|
|
10
|
+
# Domain: [-1, 1]
|
|
11
|
+
#
|
|
12
|
+
# Codomain: [0, PI]
|
|
13
|
+
#
|
|
14
|
+
# Math.acos(0) == Math::PI/2 #=> true
|
|
15
|
+
#
|
|
16
|
+
def self.acos: (Integer | Float | Rational | BigDecimal x) -> Float
|
|
17
|
+
|
|
18
|
+
# Computes the inverse hyperbolic cosine of `x`.
|
|
19
|
+
#
|
|
20
|
+
# Domain: [1, INFINITY)
|
|
21
|
+
#
|
|
22
|
+
# Codomain: [0, INFINITY)
|
|
23
|
+
#
|
|
24
|
+
# Math.acosh(1) #=> 0.0
|
|
25
|
+
#
|
|
26
|
+
def self.acosh: (Integer | Float | Rational | BigDecimal x) -> Float
|
|
27
|
+
|
|
28
|
+
# Computes the arc sine of `x`. Returns -PI/2..PI/2.
|
|
29
|
+
#
|
|
30
|
+
# Domain: [-1, -1]
|
|
31
|
+
#
|
|
32
|
+
# Codomain: [-PI/2, PI/2]
|
|
33
|
+
#
|
|
34
|
+
# Math.asin(1) == Math::PI/2 #=> true
|
|
35
|
+
#
|
|
36
|
+
def self.asin: (Integer | Float | Rational | BigDecimal x) -> Float
|
|
37
|
+
|
|
38
|
+
# Computes the inverse hyperbolic sine of `x`.
|
|
39
|
+
#
|
|
40
|
+
# Domain: (-INFINITY, INFINITY)
|
|
41
|
+
#
|
|
42
|
+
# Codomain: (-INFINITY, INFINITY)
|
|
43
|
+
#
|
|
44
|
+
# Math.asinh(1) #=> 0.881373587019543
|
|
45
|
+
#
|
|
46
|
+
def self.asinh: (Integer | Float | Rational | BigDecimal x) -> Float
|
|
47
|
+
|
|
48
|
+
# Computes the arc tangent of `x`. Returns -PI/2..PI/2.
|
|
49
|
+
#
|
|
50
|
+
# Domain: (-INFINITY, INFINITY)
|
|
51
|
+
#
|
|
52
|
+
# Codomain: (-PI/2, PI/2)
|
|
53
|
+
#
|
|
54
|
+
# Math.atan(0) #=> 0.0
|
|
55
|
+
#
|
|
56
|
+
def self.atan: (Integer | Float | Rational | BigDecimal x) -> Float
|
|
57
|
+
|
|
58
|
+
# Computes the arc tangent given `y` and `x`. Returns a Float in the range
|
|
59
|
+
# -PI..PI. Return value is a angle in radians between the positive x-axis of
|
|
60
|
+
# cartesian plane and the point given by the coordinates (`x`, `y`) on it.
|
|
61
|
+
#
|
|
62
|
+
# Domain: (-INFINITY, INFINITY)
|
|
63
|
+
#
|
|
64
|
+
# Codomain: [-PI, PI]
|
|
65
|
+
#
|
|
66
|
+
# Math.atan2(-0.0, -1.0) #=> -3.141592653589793
|
|
67
|
+
# Math.atan2(-1.0, -1.0) #=> -2.356194490192345
|
|
68
|
+
# Math.atan2(-1.0, 0.0) #=> -1.5707963267948966
|
|
69
|
+
# Math.atan2(-1.0, 1.0) #=> -0.7853981633974483
|
|
70
|
+
# Math.atan2(-0.0, 1.0) #=> -0.0
|
|
71
|
+
# Math.atan2(0.0, 1.0) #=> 0.0
|
|
72
|
+
# Math.atan2(1.0, 1.0) #=> 0.7853981633974483
|
|
73
|
+
# Math.atan2(1.0, 0.0) #=> 1.5707963267948966
|
|
74
|
+
# Math.atan2(1.0, -1.0) #=> 2.356194490192345
|
|
75
|
+
# Math.atan2(0.0, -1.0) #=> 3.141592653589793
|
|
76
|
+
# Math.atan2(INFINITY, INFINITY) #=> 0.7853981633974483
|
|
77
|
+
# Math.atan2(INFINITY, -INFINITY) #=> 2.356194490192345
|
|
78
|
+
# Math.atan2(-INFINITY, INFINITY) #=> -0.7853981633974483
|
|
79
|
+
# Math.atan2(-INFINITY, -INFINITY) #=> -2.356194490192345
|
|
80
|
+
#
|
|
81
|
+
def self.atan2: (Integer | Float | Rational | BigDecimal y, Integer | Float | Rational | BigDecimal x) -> Float
|
|
82
|
+
|
|
83
|
+
# Computes the inverse hyperbolic tangent of `x`.
|
|
84
|
+
#
|
|
85
|
+
# Domain: (-1, 1)
|
|
86
|
+
#
|
|
87
|
+
# Codomain: (-INFINITY, INFINITY)
|
|
88
|
+
#
|
|
89
|
+
# Math.atanh(1) #=> Infinity
|
|
90
|
+
#
|
|
91
|
+
def self.atanh: (Integer | Float | Rational | BigDecimal x) -> Float
|
|
92
|
+
|
|
93
|
+
# Returns the cube root of `x`.
|
|
94
|
+
#
|
|
95
|
+
# Domain: (-INFINITY, INFINITY)
|
|
96
|
+
#
|
|
97
|
+
# Codomain: (-INFINITY, INFINITY)
|
|
98
|
+
#
|
|
99
|
+
# -9.upto(9) {|x|
|
|
100
|
+
# p [x, Math.cbrt(x), Math.cbrt(x)**3]
|
|
101
|
+
# }
|
|
102
|
+
# #=> [-9, -2.0800838230519, -9.0]
|
|
103
|
+
# # [-8, -2.0, -8.0]
|
|
104
|
+
# # [-7, -1.91293118277239, -7.0]
|
|
105
|
+
# # [-6, -1.81712059283214, -6.0]
|
|
106
|
+
# # [-5, -1.7099759466767, -5.0]
|
|
107
|
+
# # [-4, -1.5874010519682, -4.0]
|
|
108
|
+
# # [-3, -1.44224957030741, -3.0]
|
|
109
|
+
# # [-2, -1.25992104989487, -2.0]
|
|
110
|
+
# # [-1, -1.0, -1.0]
|
|
111
|
+
# # [0, 0.0, 0.0]
|
|
112
|
+
# # [1, 1.0, 1.0]
|
|
113
|
+
# # [2, 1.25992104989487, 2.0]
|
|
114
|
+
# # [3, 1.44224957030741, 3.0]
|
|
115
|
+
# # [4, 1.5874010519682, 4.0]
|
|
116
|
+
# # [5, 1.7099759466767, 5.0]
|
|
117
|
+
# # [6, 1.81712059283214, 6.0]
|
|
118
|
+
# # [7, 1.91293118277239, 7.0]
|
|
119
|
+
# # [8, 2.0, 8.0]
|
|
120
|
+
# # [9, 2.0800838230519, 9.0]
|
|
121
|
+
#
|
|
122
|
+
def self.cbrt: (Integer | Float | Rational | BigDecimal x) -> Float
|
|
123
|
+
|
|
124
|
+
# Computes the cosine of `x` (expressed in radians). Returns a Float in the
|
|
125
|
+
# range -1.0..1.0.
|
|
126
|
+
#
|
|
127
|
+
# Domain: (-INFINITY, INFINITY)
|
|
128
|
+
#
|
|
129
|
+
# Codomain: [-1, 1]
|
|
130
|
+
#
|
|
131
|
+
# Math.cos(Math::PI) #=> -1.0
|
|
132
|
+
#
|
|
133
|
+
def self.cos: (Integer | Float | Rational | BigDecimal x) -> Float
|
|
134
|
+
|
|
135
|
+
# Computes the hyperbolic cosine of `x` (expressed in radians).
|
|
136
|
+
#
|
|
137
|
+
# Domain: (-INFINITY, INFINITY)
|
|
138
|
+
#
|
|
139
|
+
# Codomain: [1, INFINITY)
|
|
140
|
+
#
|
|
141
|
+
# Math.cosh(0) #=> 1.0
|
|
142
|
+
#
|
|
143
|
+
def self.cosh: (Integer | Float | Rational | BigDecimal x) -> Float
|
|
144
|
+
|
|
145
|
+
# Calculates the error function of `x`.
|
|
146
|
+
#
|
|
147
|
+
# Domain: (-INFINITY, INFINITY)
|
|
148
|
+
#
|
|
149
|
+
# Codomain: (-1, 1)
|
|
150
|
+
#
|
|
151
|
+
# Math.erf(0) #=> 0.0
|
|
152
|
+
#
|
|
153
|
+
def self.erf: (Integer | Float | Rational | BigDecimal x) -> Float
|
|
154
|
+
|
|
155
|
+
# Calculates the complementary error function of x.
|
|
156
|
+
#
|
|
157
|
+
# Domain: (-INFINITY, INFINITY)
|
|
158
|
+
#
|
|
159
|
+
# Codomain: (0, 2)
|
|
160
|
+
#
|
|
161
|
+
# Math.erfc(0) #=> 1.0
|
|
162
|
+
#
|
|
163
|
+
def self.erfc: (Integer | Float | Rational | BigDecimal x) -> Float
|
|
164
|
+
|
|
165
|
+
# Returns e**x.
|
|
166
|
+
#
|
|
167
|
+
# Domain: (-INFINITY, INFINITY)
|
|
168
|
+
#
|
|
169
|
+
# Codomain: (0, INFINITY)
|
|
170
|
+
#
|
|
171
|
+
# Math.exp(0) #=> 1.0
|
|
172
|
+
# Math.exp(1) #=> 2.718281828459045
|
|
173
|
+
# Math.exp(1.5) #=> 4.4816890703380645
|
|
174
|
+
#
|
|
175
|
+
def self.exp: (Integer | Float | Rational | BigDecimal x) -> Float
|
|
176
|
+
|
|
177
|
+
# Returns a two-element array containing the normalized fraction (a Float) and
|
|
178
|
+
# exponent (an Integer) of `x`.
|
|
179
|
+
#
|
|
180
|
+
# fraction, exponent = Math.frexp(1234) #=> [0.6025390625, 11]
|
|
181
|
+
# fraction * 2**exponent #=> 1234.0
|
|
182
|
+
#
|
|
183
|
+
def self.frexp: (Integer | Float | Rational | BigDecimal x) -> [ Float, Integer ]
|
|
184
|
+
|
|
185
|
+
# Calculates the gamma function of x.
|
|
186
|
+
#
|
|
187
|
+
# Note that gamma(n) is same as fact(n-1) for integer n > 0. However gamma(n)
|
|
188
|
+
# returns float and can be an approximation.
|
|
189
|
+
#
|
|
190
|
+
# def fact(n) (1..n).inject(1) {|r,i| r*i } end
|
|
191
|
+
# 1.upto(26) {|i| p [i, Math.gamma(i), fact(i-1)] }
|
|
192
|
+
# #=> [1, 1.0, 1]
|
|
193
|
+
# # [2, 1.0, 1]
|
|
194
|
+
# # [3, 2.0, 2]
|
|
195
|
+
# # [4, 6.0, 6]
|
|
196
|
+
# # [5, 24.0, 24]
|
|
197
|
+
# # [6, 120.0, 120]
|
|
198
|
+
# # [7, 720.0, 720]
|
|
199
|
+
# # [8, 5040.0, 5040]
|
|
200
|
+
# # [9, 40320.0, 40320]
|
|
201
|
+
# # [10, 362880.0, 362880]
|
|
202
|
+
# # [11, 3628800.0, 3628800]
|
|
203
|
+
# # [12, 39916800.0, 39916800]
|
|
204
|
+
# # [13, 479001600.0, 479001600]
|
|
205
|
+
# # [14, 6227020800.0, 6227020800]
|
|
206
|
+
# # [15, 87178291200.0, 87178291200]
|
|
207
|
+
# # [16, 1307674368000.0, 1307674368000]
|
|
208
|
+
# # [17, 20922789888000.0, 20922789888000]
|
|
209
|
+
# # [18, 355687428096000.0, 355687428096000]
|
|
210
|
+
# # [19, 6.402373705728e+15, 6402373705728000]
|
|
211
|
+
# # [20, 1.21645100408832e+17, 121645100408832000]
|
|
212
|
+
# # [21, 2.43290200817664e+18, 2432902008176640000]
|
|
213
|
+
# # [22, 5.109094217170944e+19, 51090942171709440000]
|
|
214
|
+
# # [23, 1.1240007277776077e+21, 1124000727777607680000]
|
|
215
|
+
# # [24, 2.5852016738885062e+22, 25852016738884976640000]
|
|
216
|
+
# # [25, 6.204484017332391e+23, 620448401733239439360000]
|
|
217
|
+
# # [26, 1.5511210043330954e+25, 15511210043330985984000000]
|
|
218
|
+
#
|
|
219
|
+
def self.gamma: (Integer | Float | Rational | BigDecimal x) -> Float
|
|
220
|
+
|
|
221
|
+
# Returns sqrt(x**2 + y**2), the hypotenuse of a right-angled triangle with
|
|
222
|
+
# sides `x` and `y`.
|
|
223
|
+
#
|
|
224
|
+
# Math.hypot(3, 4) #=> 5.0
|
|
225
|
+
#
|
|
226
|
+
def self.hypot: (Integer | Float | Rational | BigDecimal x, Integer | Float | Rational | BigDecimal y) -> Float
|
|
227
|
+
|
|
228
|
+
# Returns the value of `fraction`*(2**`exponent`).
|
|
229
|
+
#
|
|
230
|
+
# fraction, exponent = Math.frexp(1234)
|
|
231
|
+
# Math.ldexp(fraction, exponent) #=> 1234.0
|
|
232
|
+
#
|
|
233
|
+
def self.ldexp: (Integer | Float | Rational | BigDecimal fraction, Integer | Float | Rational | BigDecimal exponent) -> Float
|
|
234
|
+
|
|
235
|
+
# Calculates the logarithmic gamma of `x` and the sign of gamma of `x`.
|
|
236
|
+
#
|
|
237
|
+
# Math.lgamma(x) is same as
|
|
238
|
+
# [Math.log(Math.gamma(x).abs), Math.gamma(x) < 0 ? -1 : 1]
|
|
239
|
+
#
|
|
240
|
+
# but avoid overflow by Math.gamma(x) for large x.
|
|
241
|
+
#
|
|
242
|
+
# Math.lgamma(0) #=> [Infinity, 1]
|
|
243
|
+
#
|
|
244
|
+
def self.lgamma: (Integer | Float | Rational | BigDecimal x) -> [ Float, Integer ]
|
|
245
|
+
|
|
246
|
+
def self.log: (Integer | Float | Rational | BigDecimal x, ?Integer | Float | Rational | BigDecimal base) -> Float
|
|
247
|
+
|
|
248
|
+
# Returns the base 10 logarithm of `x`.
|
|
249
|
+
#
|
|
250
|
+
# Domain: (0, INFINITY)
|
|
251
|
+
#
|
|
252
|
+
# Codomain: (-INFINITY, INFINITY)
|
|
253
|
+
#
|
|
254
|
+
# Math.log10(1) #=> 0.0
|
|
255
|
+
# Math.log10(10) #=> 1.0
|
|
256
|
+
# Math.log10(10**100) #=> 100.0
|
|
257
|
+
#
|
|
258
|
+
def self.log10: (Integer | Float | Rational | BigDecimal x) -> Float
|
|
259
|
+
|
|
260
|
+
# Returns the base 2 logarithm of `x`.
|
|
261
|
+
#
|
|
262
|
+
# Domain: (0, INFINITY)
|
|
263
|
+
#
|
|
264
|
+
# Codomain: (-INFINITY, INFINITY)
|
|
265
|
+
#
|
|
266
|
+
# Math.log2(1) #=> 0.0
|
|
267
|
+
# Math.log2(2) #=> 1.0
|
|
268
|
+
# Math.log2(32768) #=> 15.0
|
|
269
|
+
# Math.log2(65536) #=> 16.0
|
|
270
|
+
#
|
|
271
|
+
def self.log2: (Integer | Float | Rational | BigDecimal x) -> Float
|
|
272
|
+
|
|
273
|
+
# Computes the sine of `x` (expressed in radians). Returns a Float in the range
|
|
274
|
+
# -1.0..1.0.
|
|
275
|
+
#
|
|
276
|
+
# Domain: (-INFINITY, INFINITY)
|
|
277
|
+
#
|
|
278
|
+
# Codomain: [-1, 1]
|
|
279
|
+
#
|
|
280
|
+
# Math.sin(Math::PI/2) #=> 1.0
|
|
281
|
+
#
|
|
282
|
+
def self.sin: (Integer | Float | Rational | BigDecimal x) -> Float
|
|
283
|
+
|
|
284
|
+
# Computes the hyperbolic sine of `x` (expressed in radians).
|
|
285
|
+
#
|
|
286
|
+
# Domain: (-INFINITY, INFINITY)
|
|
287
|
+
#
|
|
288
|
+
# Codomain: (-INFINITY, INFINITY)
|
|
289
|
+
#
|
|
290
|
+
# Math.sinh(0) #=> 0.0
|
|
291
|
+
#
|
|
292
|
+
def self.sinh: (Integer | Float | Rational | BigDecimal x) -> Float
|
|
293
|
+
|
|
294
|
+
# Returns the non-negative square root of `x`.
|
|
295
|
+
#
|
|
296
|
+
# Domain: [0, INFINITY)
|
|
297
|
+
#
|
|
298
|
+
# Codomain:[0, INFINITY)
|
|
299
|
+
#
|
|
300
|
+
# 0.upto(10) {|x|
|
|
301
|
+
# p [x, Math.sqrt(x), Math.sqrt(x)**2]
|
|
302
|
+
# }
|
|
303
|
+
# #=> [0, 0.0, 0.0]
|
|
304
|
+
# # [1, 1.0, 1.0]
|
|
305
|
+
# # [2, 1.4142135623731, 2.0]
|
|
306
|
+
# # [3, 1.73205080756888, 3.0]
|
|
307
|
+
# # [4, 2.0, 4.0]
|
|
308
|
+
# # [5, 2.23606797749979, 5.0]
|
|
309
|
+
# # [6, 2.44948974278318, 6.0]
|
|
310
|
+
# # [7, 2.64575131106459, 7.0]
|
|
311
|
+
# # [8, 2.82842712474619, 8.0]
|
|
312
|
+
# # [9, 3.0, 9.0]
|
|
313
|
+
# # [10, 3.16227766016838, 10.0]
|
|
314
|
+
#
|
|
315
|
+
# Note that the limited precision of floating point arithmetic might lead to
|
|
316
|
+
# surprising results:
|
|
317
|
+
#
|
|
318
|
+
# Math.sqrt(10**46).to_i #=> 99999999999999991611392 (!)
|
|
319
|
+
#
|
|
320
|
+
# See also BigDecimal#sqrt and Integer.sqrt.
|
|
321
|
+
#
|
|
322
|
+
def self.sqrt: (Integer | Float | Rational | BigDecimal x) -> Float
|
|
323
|
+
|
|
324
|
+
# Computes the tangent of `x` (expressed in radians).
|
|
325
|
+
#
|
|
326
|
+
# Domain: (-INFINITY, INFINITY)
|
|
327
|
+
#
|
|
328
|
+
# Codomain: (-INFINITY, INFINITY)
|
|
329
|
+
#
|
|
330
|
+
# Math.tan(0) #=> 0.0
|
|
331
|
+
#
|
|
332
|
+
def self.tan: (Integer | Float | Rational | BigDecimal x) -> Float
|
|
333
|
+
|
|
334
|
+
# Computes the hyperbolic tangent of `x` (expressed in radians).
|
|
335
|
+
#
|
|
336
|
+
# Domain: (-INFINITY, INFINITY)
|
|
337
|
+
#
|
|
338
|
+
# Codomain: (-1, 1)
|
|
339
|
+
#
|
|
340
|
+
# Math.tanh(0) #=> 0.0
|
|
341
|
+
#
|
|
342
|
+
def self.tanh: (Integer | Float | Rational | BigDecimal x) -> Float
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
# Definition of the mathematical constant E for Euler's number (e) as a Float
|
|
346
|
+
# number.
|
|
347
|
+
#
|
|
348
|
+
#
|
|
349
|
+
Math::E: Float
|
|
350
|
+
|
|
351
|
+
# Definition of the mathematical constant PI as a Float number.
|
|
352
|
+
#
|
|
353
|
+
#
|
|
354
|
+
Math::PI: Float
|
|
355
|
+
|
|
356
|
+
# Raised when a mathematical function is evaluated outside of its domain of
|
|
357
|
+
# definition.
|
|
358
|
+
#
|
|
359
|
+
# For example, since `cos` returns values in the range -1..1, its inverse
|
|
360
|
+
# function `acos` is only defined on that interval:
|
|
361
|
+
#
|
|
362
|
+
# Math.acos(42)
|
|
363
|
+
#
|
|
364
|
+
# *produces:*
|
|
365
|
+
#
|
|
366
|
+
# Math::DomainError: Numerical argument is out of domain - "acos"
|
|
367
|
+
#
|
|
368
|
+
class Math::DomainError < StandardError
|
|
369
|
+
end
|