rbs 3.9.5 → 4.0.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/.clang-format +74 -0
- data/.clangd +2 -0
- data/.github/dependabot.yml +14 -14
- data/.github/workflows/bundle-update.yml +60 -0
- data/.github/workflows/c-check.yml +58 -0
- data/.github/workflows/comments.yml +5 -3
- data/.github/workflows/dependabot.yml +2 -2
- data/.github/workflows/ruby.yml +40 -32
- data/.github/workflows/rust.yml +95 -0
- data/.github/workflows/typecheck.yml +2 -2
- data/.github/workflows/windows.yml +3 -3
- data/.gitignore +4 -0
- data/.rubocop.yml +2 -2
- data/.vscode/extensions.json +5 -0
- data/.vscode/settings.json +19 -0
- data/CHANGELOG.md +284 -0
- data/README.md +38 -1
- data/Rakefile +144 -29
- data/Steepfile +2 -0
- data/config.yml +634 -62
- data/core/array.rbs +307 -227
- data/core/basic_object.rbs +9 -8
- data/core/binding.rbs +0 -2
- data/core/builtin.rbs +2 -2
- data/core/class.rbs +6 -5
- data/core/comparable.rbs +55 -34
- data/core/complex.rbs +104 -78
- data/core/dir.rbs +61 -49
- data/core/encoding.rbs +12 -15
- data/core/enumerable.rbs +188 -87
- data/core/enumerator/arithmetic_sequence.rbs +70 -0
- data/core/enumerator.rbs +65 -2
- data/core/errno.rbs +11 -2
- data/core/errors.rbs +58 -29
- data/core/exception.rbs +13 -13
- data/core/fiber.rbs +74 -54
- data/core/file.rbs +280 -177
- data/core/file_test.rbs +3 -3
- data/core/float.rbs +257 -92
- data/core/gc.rbs +425 -281
- data/core/hash.rbs +1045 -739
- data/core/integer.rbs +135 -137
- data/core/io/buffer.rbs +53 -42
- data/core/io/wait.rbs +13 -35
- data/core/io.rbs +196 -148
- data/core/kernel.rbs +216 -155
- data/core/marshal.rbs +4 -4
- data/core/match_data.rbs +15 -13
- data/core/math.rbs +107 -66
- data/core/method.rbs +69 -33
- data/core/module.rbs +244 -106
- data/core/nil_class.rbs +7 -6
- data/core/numeric.rbs +74 -63
- data/core/object.rbs +9 -11
- data/core/object_space.rbs +30 -23
- data/core/pathname.rbs +1322 -0
- data/core/proc.rbs +95 -58
- data/core/process.rbs +222 -202
- data/core/ractor.rbs +371 -515
- data/core/random.rbs +21 -3
- data/core/range.rbs +159 -57
- data/core/rational.rbs +60 -89
- data/core/rbs/unnamed/argf.rbs +60 -53
- data/core/rbs/unnamed/env_class.rbs +19 -14
- data/core/rbs/unnamed/main_class.rbs +123 -0
- data/core/rbs/unnamed/random.rbs +11 -118
- data/core/regexp.rbs +258 -214
- data/core/ruby.rbs +53 -0
- data/core/ruby_vm.rbs +38 -34
- data/core/rubygems/config_file.rbs +5 -5
- data/core/rubygems/errors.rbs +4 -71
- data/core/rubygems/requirement.rbs +5 -5
- data/core/rubygems/rubygems.rbs +16 -82
- data/core/rubygems/version.rbs +2 -3
- data/core/set.rbs +490 -360
- data/core/signal.rbs +26 -16
- data/core/string.rbs +3303 -1365
- data/core/struct.rbs +27 -26
- data/core/symbol.rbs +41 -34
- data/core/thread.rbs +135 -74
- data/core/time.rbs +81 -50
- data/core/trace_point.rbs +41 -35
- data/core/true_class.rbs +2 -2
- data/core/unbound_method.rbs +24 -16
- data/core/warning.rbs +7 -7
- data/docs/aliases.md +79 -0
- data/docs/collection.md +3 -3
- data/docs/config.md +171 -0
- data/docs/encoding.md +56 -0
- data/docs/gem.md +0 -1
- data/docs/inline.md +576 -0
- data/docs/sigs.md +3 -3
- data/docs/syntax.md +46 -16
- data/docs/type_fingerprint.md +21 -0
- data/exe/rbs +1 -1
- data/ext/rbs_extension/ast_translation.c +1513 -0
- data/ext/rbs_extension/ast_translation.h +37 -0
- data/ext/rbs_extension/class_constants.c +185 -0
- data/{include/rbs/constants.h → ext/rbs_extension/class_constants.h} +22 -1
- data/ext/rbs_extension/compat.h +10 -0
- data/ext/rbs_extension/extconf.rb +25 -1
- data/ext/rbs_extension/legacy_location.c +294 -0
- data/ext/rbs_extension/legacy_location.h +82 -0
- data/ext/rbs_extension/main.c +468 -24
- data/ext/rbs_extension/rbs_extension.h +6 -21
- data/ext/rbs_extension/rbs_string_bridging.c +9 -0
- data/ext/rbs_extension/rbs_string_bridging.h +24 -0
- data/include/rbs/ast.h +1022 -0
- data/include/rbs/defines.h +86 -0
- data/include/rbs/lexer.h +206 -0
- data/include/rbs/location.h +40 -0
- data/include/rbs/parser.h +153 -0
- data/include/rbs/string.h +47 -0
- data/include/rbs/util/rbs_allocator.h +59 -0
- data/include/rbs/util/rbs_assert.h +20 -0
- data/include/rbs/util/rbs_buffer.h +83 -0
- data/include/rbs/util/rbs_constant_pool.h +6 -70
- data/include/rbs/util/rbs_encoding.h +282 -0
- data/include/rbs/util/rbs_unescape.h +24 -0
- data/include/rbs.h +9 -2
- data/lib/rbs/annotate/formatter.rb +3 -13
- data/lib/rbs/annotate/rdoc_annotator.rb +3 -1
- data/lib/rbs/annotate/rdoc_source.rb +1 -1
- data/lib/rbs/ast/annotation.rb +1 -1
- data/lib/rbs/ast/comment.rb +1 -1
- data/lib/rbs/ast/declarations.rb +10 -10
- data/lib/rbs/ast/members.rb +14 -14
- data/lib/rbs/ast/ruby/annotations.rb +409 -0
- data/lib/rbs/ast/ruby/comment_block.rb +245 -0
- data/lib/rbs/ast/ruby/declarations.rb +281 -0
- data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
- data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
- data/lib/rbs/ast/ruby/members.rb +723 -0
- data/lib/rbs/ast/type_param.rb +24 -4
- data/lib/rbs/buffer.rb +105 -20
- data/lib/rbs/cli/diff.rb +16 -15
- data/lib/rbs/cli/validate.rb +63 -126
- data/lib/rbs/cli.rb +56 -24
- data/lib/rbs/collection/config/lockfile_generator.rb +14 -2
- data/lib/rbs/collection/sources/git.rb +1 -0
- data/lib/rbs/collection.rb +0 -1
- data/lib/rbs/definition.rb +6 -1
- data/lib/rbs/definition_builder/ancestor_builder.rb +121 -65
- data/lib/rbs/definition_builder/method_builder.rb +65 -30
- data/lib/rbs/definition_builder.rb +177 -20
- data/lib/rbs/diff.rb +7 -1
- data/lib/rbs/environment/class_entry.rb +69 -0
- data/lib/rbs/environment/module_entry.rb +66 -0
- data/lib/rbs/environment.rb +402 -214
- data/lib/rbs/environment_loader.rb +2 -8
- data/lib/rbs/errors.rb +31 -21
- data/lib/rbs/inline_parser/comment_association.rb +117 -0
- data/lib/rbs/inline_parser.rb +542 -0
- data/lib/rbs/location_aux.rb +36 -4
- data/lib/rbs/locator.rb +5 -1
- data/lib/rbs/method_type.rb +5 -3
- data/lib/rbs/namespace.rb +0 -7
- data/lib/rbs/parser_aux.rb +35 -7
- data/lib/rbs/prototype/helpers.rb +57 -0
- data/lib/rbs/prototype/rb.rb +3 -28
- data/lib/rbs/prototype/rbi.rb +3 -20
- data/lib/rbs/prototype/runtime.rb +10 -2
- data/lib/rbs/resolver/constant_resolver.rb +2 -2
- data/lib/rbs/resolver/type_name_resolver.rb +116 -38
- data/lib/rbs/source.rb +99 -0
- data/lib/rbs/subtractor.rb +7 -4
- data/lib/rbs/test/type_check.rb +19 -2
- data/lib/rbs/type_name.rb +1 -8
- data/lib/rbs/types.rb +91 -79
- data/lib/rbs/unit_test/convertibles.rb +1 -0
- data/lib/rbs/unit_test/type_assertions.rb +35 -8
- data/lib/rbs/validator.rb +2 -2
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs.rb +13 -2
- data/lib/rdoc/discover.rb +1 -1
- data/lib/rdoc_plugin/parser.rb +3 -3
- data/rbs.gemspec +4 -2
- data/rust/.gitignore +1 -0
- data/rust/Cargo.lock +378 -0
- data/rust/Cargo.toml +7 -0
- data/rust/ruby-rbs/Cargo.toml +22 -0
- data/rust/ruby-rbs/build.rs +764 -0
- data/rust/ruby-rbs/examples/locations.rs +60 -0
- data/rust/ruby-rbs/src/lib.rs +1 -0
- data/rust/ruby-rbs/src/node/mod.rs +742 -0
- data/rust/ruby-rbs/tests/sanity.rs +47 -0
- data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
- data/rust/ruby-rbs-sys/Cargo.toml +23 -0
- data/rust/ruby-rbs-sys/build.rs +204 -0
- data/rust/ruby-rbs-sys/src/lib.rs +50 -0
- data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
- data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
- data/rust/ruby-rbs-sys/wrapper.h +1 -0
- data/schema/typeParam.json +17 -1
- data/sig/ancestor_builder.rbs +1 -1
- data/sig/annotate/formatter.rbs +2 -2
- data/sig/annotate/rdoc_annotater.rbs +1 -1
- data/sig/ast/ruby/annotations.rbs +421 -0
- data/sig/ast/ruby/comment_block.rbs +127 -0
- data/sig/ast/ruby/declarations.rbs +158 -0
- data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
- data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
- data/sig/ast/ruby/members.rbs +178 -0
- data/sig/buffer.rbs +63 -5
- data/sig/cli/diff.rbs +5 -11
- data/sig/cli/validate.rbs +12 -8
- data/sig/cli.rbs +18 -18
- data/sig/definition.rbs +6 -0
- data/sig/definition_builder.rbs +3 -1
- data/sig/environment/class_entry.rbs +50 -0
- data/sig/environment/module_entry.rbs +50 -0
- data/sig/environment.rbs +94 -87
- data/sig/errors.rbs +26 -20
- data/sig/inline_parser/comment_association.rbs +71 -0
- data/sig/inline_parser.rbs +124 -0
- data/sig/location.rbs +32 -7
- data/sig/locator.rbs +0 -2
- data/sig/manifest.yaml +0 -1
- data/sig/method_builder.rbs +9 -4
- data/sig/namespace.rbs +0 -5
- data/sig/parser.rbs +67 -13
- data/sig/prototype/helpers.rbs +2 -0
- data/sig/resolver/type_name_resolver.rbs +35 -7
- data/sig/source.rbs +48 -0
- data/sig/type_param.rbs +13 -8
- data/sig/typename.rbs +0 -5
- data/sig/types.rbs +10 -8
- data/sig/unit_test/spy.rbs +0 -8
- data/sig/unit_test/type_assertions.rbs +11 -0
- data/src/ast.c +1604 -0
- data/src/lexer.c +3194 -0
- data/src/lexer.re +154 -0
- data/src/lexstate.c +212 -0
- data/src/location.c +31 -0
- data/src/parser.c +4205 -0
- data/src/string.c +41 -0
- data/src/util/rbs_allocator.c +165 -0
- data/src/util/rbs_assert.c +19 -0
- data/src/util/rbs_buffer.c +54 -0
- data/src/util/rbs_constant_pool.c +18 -92
- data/src/util/rbs_encoding.c +21308 -0
- data/src/util/rbs_unescape.c +167 -0
- data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
- data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
- data/stdlib/cgi/0/core.rbs +9 -393
- data/stdlib/cgi/0/manifest.yaml +1 -0
- data/stdlib/cgi-escape/0/escape.rbs +171 -0
- data/stdlib/coverage/0/coverage.rbs +7 -4
- data/stdlib/date/0/date.rbs +92 -79
- data/stdlib/date/0/date_time.rbs +25 -24
- data/stdlib/delegate/0/delegator.rbs +10 -7
- data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
- data/stdlib/digest/0/digest.rbs +110 -0
- data/stdlib/erb/0/erb.rbs +748 -347
- data/stdlib/etc/0/etc.rbs +55 -50
- data/stdlib/fileutils/0/fileutils.rbs +158 -139
- data/stdlib/forwardable/0/forwardable.rbs +13 -10
- data/stdlib/io-console/0/io-console.rbs +2 -2
- data/stdlib/json/0/json.rbs +226 -179
- data/stdlib/monitor/0/monitor.rbs +3 -3
- data/stdlib/net-http/0/net-http.rbs +162 -134
- data/stdlib/objspace/0/objspace.rbs +17 -34
- data/stdlib/open-uri/0/open-uri.rbs +48 -8
- data/stdlib/open3/0/open3.rbs +469 -10
- data/stdlib/openssl/0/openssl.rbs +475 -357
- data/stdlib/optparse/0/optparse.rbs +26 -17
- data/stdlib/pathname/0/pathname.rbs +11 -1381
- data/stdlib/pp/0/pp.rbs +9 -8
- data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
- data/stdlib/pstore/0/pstore.rbs +35 -30
- data/stdlib/psych/0/psych.rbs +65 -12
- data/stdlib/psych/0/store.rbs +2 -4
- data/stdlib/pty/0/pty.rbs +9 -6
- data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
- data/stdlib/rdoc/0/code_object.rbs +4 -3
- data/stdlib/rdoc/0/comment.rbs +2 -0
- data/stdlib/rdoc/0/options.rbs +76 -0
- data/stdlib/rdoc/0/parser.rbs +1 -1
- data/stdlib/rdoc/0/rdoc.rbs +7 -5
- data/stdlib/rdoc/0/store.rbs +2 -2
- data/stdlib/resolv/0/resolv.rbs +25 -68
- data/stdlib/ripper/0/ripper.rbs +25 -19
- data/stdlib/securerandom/0/manifest.yaml +2 -0
- data/stdlib/securerandom/0/securerandom.rbs +7 -20
- data/stdlib/shellwords/0/shellwords.rbs +2 -2
- data/stdlib/singleton/0/singleton.rbs +3 -0
- data/stdlib/socket/0/addrinfo.rbs +9 -9
- data/stdlib/socket/0/basic_socket.rbs +3 -3
- data/stdlib/socket/0/ip_socket.rbs +10 -8
- data/stdlib/socket/0/socket.rbs +23 -10
- data/stdlib/socket/0/tcp_server.rbs +1 -1
- data/stdlib/socket/0/tcp_socket.rbs +11 -3
- data/stdlib/socket/0/udp_socket.rbs +1 -1
- data/stdlib/socket/0/unix_server.rbs +1 -1
- data/stdlib/stringio/0/stringio.rbs +1177 -85
- data/stdlib/strscan/0/string_scanner.rbs +27 -25
- data/stdlib/tempfile/0/tempfile.rbs +25 -21
- data/stdlib/time/0/time.rbs +8 -6
- data/stdlib/timeout/0/timeout.rbs +63 -7
- data/stdlib/tsort/0/cyclic.rbs +3 -0
- data/stdlib/tsort/0/tsort.rbs +7 -6
- data/stdlib/uri/0/common.rbs +42 -20
- data/stdlib/uri/0/file.rbs +3 -3
- data/stdlib/uri/0/generic.rbs +26 -18
- data/stdlib/uri/0/http.rbs +2 -2
- data/stdlib/uri/0/ldap.rbs +2 -2
- data/stdlib/uri/0/mailto.rbs +3 -3
- data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
- data/stdlib/zlib/0/deflate.rbs +4 -3
- data/stdlib/zlib/0/gzip_reader.rbs +6 -6
- data/stdlib/zlib/0/gzip_writer.rbs +14 -12
- data/stdlib/zlib/0/inflate.rbs +1 -1
- data/stdlib/zlib/0/need_dict.rbs +1 -1
- data/stdlib/zlib/0/zstream.rbs +1 -0
- metadata +121 -18
- data/ext/rbs_extension/lexer.c +0 -2728
- data/ext/rbs_extension/lexer.h +0 -179
- data/ext/rbs_extension/lexer.re +0 -147
- data/ext/rbs_extension/lexstate.c +0 -175
- data/ext/rbs_extension/location.c +0 -325
- data/ext/rbs_extension/location.h +0 -85
- data/ext/rbs_extension/parser.c +0 -2982
- data/ext/rbs_extension/parser.h +0 -18
- data/ext/rbs_extension/parserstate.c +0 -411
- data/ext/rbs_extension/parserstate.h +0 -163
- data/ext/rbs_extension/unescape.c +0 -32
- data/include/rbs/ruby_objs.h +0 -72
- data/src/constants.c +0 -153
- data/src/ruby_objs.c +0 -799
data/core/integer.rbs
CHANGED
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
# * #downto: Calls the given block with each integer value from `self` down to
|
|
89
89
|
# the given value.
|
|
90
90
|
# * #times: Calls the given block `self` times with each integer in
|
|
91
|
-
#
|
|
91
|
+
# <code>(0..self-1)</code>.
|
|
92
92
|
# * #upto: Calls the given block with each integer value from `self` up to the
|
|
93
93
|
# given value.
|
|
94
94
|
#
|
|
@@ -114,9 +114,9 @@ class Integer < Numeric
|
|
|
114
114
|
# Integer.sqrt(4.0) # => 2
|
|
115
115
|
# Integer.sqrt(3.14159) # => 1
|
|
116
116
|
#
|
|
117
|
-
# This method is equivalent to
|
|
118
|
-
# result of the latter code may differ from the true value due to the
|
|
119
|
-
# precision of floating point arithmetic.
|
|
117
|
+
# This method is equivalent to <code>Math.sqrt(numeric).floor</code>, except
|
|
118
|
+
# that the result of the latter code may differ from the true value due to the
|
|
119
|
+
# limited precision of floating point arithmetic.
|
|
120
120
|
#
|
|
121
121
|
# Integer.sqrt(10**46) # => 100000000000000000000000
|
|
122
122
|
# Math.sqrt(10**46).floor # => 99999999999999991611392
|
|
@@ -132,23 +132,24 @@ class Integer < Numeric
|
|
|
132
132
|
# If `object` is an Integer object, returns `object`.
|
|
133
133
|
# Integer.try_convert(1) # => 1
|
|
134
134
|
#
|
|
135
|
-
# Otherwise if `object` responds to
|
|
136
|
-
# the result.
|
|
135
|
+
# Otherwise if `object` responds to <code>:to_int</code>, calls
|
|
136
|
+
# <code>object.to_int</code> and returns the result.
|
|
137
137
|
# Integer.try_convert(1.25) # => 1
|
|
138
138
|
#
|
|
139
|
-
# Returns `nil` if `object` does not respond to
|
|
139
|
+
# Returns `nil` if `object` does not respond to <code>:to_int</code>
|
|
140
140
|
# Integer.try_convert([]) # => nil
|
|
141
141
|
#
|
|
142
|
-
# Raises an exception unless
|
|
142
|
+
# Raises an exception unless <code>object.to_int</code> returns an Integer
|
|
143
|
+
# object.
|
|
143
144
|
#
|
|
144
145
|
def self.try_convert: (int) -> Integer
|
|
145
146
|
| (untyped) -> Integer?
|
|
146
147
|
|
|
147
148
|
# <!--
|
|
148
149
|
# rdoc-file=numeric.c
|
|
149
|
-
# - self % other ->
|
|
150
|
+
# - self % other -> real_numeric
|
|
150
151
|
# -->
|
|
151
|
-
# Returns `self` modulo `other` as a real
|
|
152
|
+
# Returns `self` modulo `other` as a real numeric (Integer, Float, or Rational).
|
|
152
153
|
#
|
|
153
154
|
# For integer `n` and real number `r`, these expressions are equivalent:
|
|
154
155
|
#
|
|
@@ -193,13 +194,13 @@ class Integer < Numeric
|
|
|
193
194
|
|
|
194
195
|
# <!--
|
|
195
196
|
# rdoc-file=numeric.c
|
|
196
|
-
# - self *
|
|
197
|
+
# - self * other -> numeric
|
|
197
198
|
# -->
|
|
198
|
-
#
|
|
199
|
+
# Returns the numeric product of `self` and `other`:
|
|
199
200
|
#
|
|
200
201
|
# 4 * 2 # => 8
|
|
201
|
-
# 4 * -2 # => -8
|
|
202
202
|
# -4 * 2 # => -8
|
|
203
|
+
# 4 * -2 # => -8
|
|
203
204
|
# 4 * 2.0 # => 8.0
|
|
204
205
|
# 4 * Rational(1, 3) # => (4/3)
|
|
205
206
|
# 4 * Complex(2, 0) # => (8+0i)
|
|
@@ -211,17 +212,47 @@ class Integer < Numeric
|
|
|
211
212
|
|
|
212
213
|
# <!--
|
|
213
214
|
# rdoc-file=numeric.c
|
|
214
|
-
# - self **
|
|
215
|
+
# - self ** exponent -> numeric
|
|
215
216
|
# -->
|
|
216
|
-
#
|
|
217
|
-
#
|
|
218
|
-
#
|
|
219
|
-
# 2 **
|
|
220
|
-
#
|
|
221
|
-
#
|
|
222
|
-
# 2 ** 3
|
|
223
|
-
# 2 **
|
|
224
|
-
#
|
|
217
|
+
# Returns `self` raised to the power `exponent`:
|
|
218
|
+
#
|
|
219
|
+
# # Result for non-negative Integer exponent is Integer.
|
|
220
|
+
# 2 ** 0 # => 1
|
|
221
|
+
# 2 ** 1 # => 2
|
|
222
|
+
# 2 ** 2 # => 4
|
|
223
|
+
# 2 ** 3 # => 8
|
|
224
|
+
# -2 ** 3 # => -8
|
|
225
|
+
# # Result for negative Integer exponent is Rational, not Float.
|
|
226
|
+
# 2 ** -3 # => (1/8)
|
|
227
|
+
# -2 ** -3 # => (-1/8)
|
|
228
|
+
#
|
|
229
|
+
# # Result for Float exponent is Float.
|
|
230
|
+
# 2 ** 0.0 # => 1.0
|
|
231
|
+
# 2 ** 1.0 # => 2.0
|
|
232
|
+
# 2 ** 2.0 # => 4.0
|
|
233
|
+
# 2 ** 3.0 # => 8.0
|
|
234
|
+
# -2 ** 3.0 # => -8.0
|
|
235
|
+
# 2 ** -3.0 # => 0.125
|
|
236
|
+
# -2 ** -3.0 # => -0.125
|
|
237
|
+
#
|
|
238
|
+
# # Result for non-negative Complex exponent is Complex with Integer parts.
|
|
239
|
+
# 2 ** Complex(0, 0) # => (1+0i)
|
|
240
|
+
# 2 ** Complex(1, 0) # => (2+0i)
|
|
241
|
+
# 2 ** Complex(2, 0) # => (4+0i)
|
|
242
|
+
# 2 ** Complex(3, 0) # => (8+0i)
|
|
243
|
+
# -2 ** Complex(3, 0) # => (-8+0i)
|
|
244
|
+
# # Result for negative Complex exponent is Complex with Rational parts.
|
|
245
|
+
# 2 ** Complex(-3, 0) # => ((1/8)+(0/1)*i)
|
|
246
|
+
# -2 ** Complex(-3, 0) # => ((-1/8)+(0/1)*i)
|
|
247
|
+
#
|
|
248
|
+
# # Result for Rational exponent is Rational.
|
|
249
|
+
# 2 ** Rational(0, 1) # => (1/1)
|
|
250
|
+
# 2 ** Rational(1, 1) # => (2/1)
|
|
251
|
+
# 2 ** Rational(2, 1) # => (4/1)
|
|
252
|
+
# 2 ** Rational(3, 1) # => (8/1)
|
|
253
|
+
# -2 ** Rational(3, 1) # => (-8/1)
|
|
254
|
+
# 2 ** Rational(-3, 1) # => (1/8)
|
|
255
|
+
# -2 ** Rational(-3, 1) # => (-1/8)
|
|
225
256
|
#
|
|
226
257
|
def **: (Integer) -> Numeric
|
|
227
258
|
| (Float) -> Numeric
|
|
@@ -230,29 +261,31 @@ class Integer < Numeric
|
|
|
230
261
|
|
|
231
262
|
# <!--
|
|
232
263
|
# rdoc-file=numeric.c
|
|
233
|
-
# - self +
|
|
264
|
+
# - self + other -> numeric
|
|
234
265
|
# -->
|
|
235
|
-
#
|
|
266
|
+
# Returns the sum of `self` and `other`:
|
|
267
|
+
#
|
|
268
|
+
# 1 + 1 # => 2
|
|
269
|
+
# 1 + -1 # => 0
|
|
270
|
+
# 1 + 0 # => 1
|
|
271
|
+
# 1 + -2 # => -1
|
|
272
|
+
# 1 + Complex(1, 0) # => (2+0i)
|
|
273
|
+
# 1 + Rational(1, 1) # => (2/1)
|
|
274
|
+
#
|
|
275
|
+
# For a computation involving Floats, the result may be inexact (see Float#+):
|
|
236
276
|
#
|
|
237
|
-
#
|
|
238
|
-
# -2 + 2 # => 0
|
|
239
|
-
# -2 + -2 # => -4
|
|
240
|
-
# 2 + 2.0 # => 4.0
|
|
241
|
-
# 2 + Rational(2, 1) # => (4/1)
|
|
242
|
-
# 2 + Complex(2, 0) # => (4+0i)
|
|
277
|
+
# 1 + 3.14 # => 4.140000000000001
|
|
243
278
|
#
|
|
244
279
|
def +: (Integer) -> Integer
|
|
245
280
|
| (Float) -> Float
|
|
246
281
|
| (Rational) -> Rational
|
|
247
282
|
| (Complex) -> Complex
|
|
248
283
|
|
|
249
|
-
def +@: () -> Integer
|
|
250
|
-
|
|
251
284
|
# <!--
|
|
252
285
|
# rdoc-file=numeric.c
|
|
253
|
-
# - self -
|
|
286
|
+
# - self - other -> numeric
|
|
254
287
|
# -->
|
|
255
|
-
#
|
|
288
|
+
# Returns the difference of `self` and `other`:
|
|
256
289
|
#
|
|
257
290
|
# 4 - 2 # => 2
|
|
258
291
|
# -4 - 2 # => -6
|
|
@@ -268,28 +301,34 @@ class Integer < Numeric
|
|
|
268
301
|
|
|
269
302
|
# <!--
|
|
270
303
|
# rdoc-file=numeric.rb
|
|
271
|
-
# - -
|
|
304
|
+
# - -self -> integer
|
|
272
305
|
# -->
|
|
273
|
-
# Returns `self`, negated
|
|
306
|
+
# Returns `self`, negated:
|
|
307
|
+
#
|
|
308
|
+
# -1 # => -1
|
|
309
|
+
# -(-1) # => 1
|
|
310
|
+
# -0 # => 0
|
|
274
311
|
#
|
|
275
312
|
def -@: () -> Integer
|
|
276
313
|
|
|
277
314
|
# <!--
|
|
278
315
|
# rdoc-file=numeric.c
|
|
279
|
-
# - self /
|
|
316
|
+
# - self / other -> numeric
|
|
280
317
|
# -->
|
|
281
|
-
#
|
|
318
|
+
# Returns the quotient of `self` and `other`.
|
|
319
|
+
#
|
|
320
|
+
# For integer `other`, truncates the result to an integer:
|
|
282
321
|
#
|
|
283
|
-
#
|
|
284
|
-
#
|
|
285
|
-
#
|
|
286
|
-
#
|
|
322
|
+
# 4 / 3 # => 1
|
|
323
|
+
# 4 / -3 # => -2
|
|
324
|
+
# -4 / 3 # => -2
|
|
325
|
+
# -4 / -3 # => 1
|
|
287
326
|
#
|
|
288
|
-
#
|
|
327
|
+
# For non-integer `other`, returns a non-integer result:
|
|
289
328
|
#
|
|
290
|
-
#
|
|
291
|
-
#
|
|
292
|
-
#
|
|
329
|
+
# 4 / 3.0 # => 1.3333333333333333
|
|
330
|
+
# 4 / Rational(3, 1) # => (4/3)
|
|
331
|
+
# 4 / Complex(3, 0) # => ((4/3)+0i)
|
|
293
332
|
#
|
|
294
333
|
def /: (Integer) -> Integer
|
|
295
334
|
| (Float) -> Float
|
|
@@ -300,15 +339,14 @@ class Integer < Numeric
|
|
|
300
339
|
# rdoc-file=numeric.c
|
|
301
340
|
# - self < other -> true or false
|
|
302
341
|
# -->
|
|
303
|
-
# Returns
|
|
342
|
+
# Returns whether the value of `self` is less than the value of `other`; `other`
|
|
343
|
+
# must be numeric, but may not be Complex:
|
|
304
344
|
#
|
|
305
|
-
#
|
|
306
|
-
#
|
|
307
|
-
#
|
|
308
|
-
#
|
|
309
|
-
#
|
|
310
|
-
#
|
|
311
|
-
# Raises an exception if the comparison cannot be made.
|
|
345
|
+
# 1 < 0 # => false
|
|
346
|
+
# 1 < 1 # => false
|
|
347
|
+
# 1 < 2 # => true
|
|
348
|
+
# 1 < 0.5 # => false
|
|
349
|
+
# 1 < Rational(1, 2) # => false
|
|
312
350
|
#
|
|
313
351
|
def <: (Numeric) -> bool
|
|
314
352
|
|
|
@@ -331,44 +369,46 @@ class Integer < Numeric
|
|
|
331
369
|
|
|
332
370
|
# <!--
|
|
333
371
|
# rdoc-file=numeric.c
|
|
334
|
-
# - self <=
|
|
372
|
+
# - self <= other -> true or false
|
|
335
373
|
# -->
|
|
336
|
-
# Returns
|
|
337
|
-
# `other
|
|
374
|
+
# Returns whether the value of `self` is less than or equal to the value of
|
|
375
|
+
# `other`; `other` must be numeric, but may not be Complex:
|
|
338
376
|
#
|
|
339
|
-
#
|
|
340
|
-
#
|
|
341
|
-
#
|
|
342
|
-
#
|
|
343
|
-
#
|
|
377
|
+
# 1 <= 0 # => false
|
|
378
|
+
# 1 <= 1 # => true
|
|
379
|
+
# 1 <= 2 # => true
|
|
380
|
+
# 1 <= 0.5 # => false
|
|
381
|
+
# 1 <= Rational(1, 2) # => false
|
|
344
382
|
#
|
|
345
|
-
#
|
|
383
|
+
# Raises an exception if the comparison cannot be made.
|
|
346
384
|
#
|
|
347
385
|
def <=: (Numeric) -> bool
|
|
348
386
|
|
|
349
387
|
# <!--
|
|
350
388
|
# rdoc-file=numeric.c
|
|
351
|
-
# - self <=> other
|
|
389
|
+
# - self <=> other -> -1, 0, 1, or nil
|
|
352
390
|
# -->
|
|
391
|
+
# Compares `self` and `other`.
|
|
392
|
+
#
|
|
353
393
|
# Returns:
|
|
354
394
|
#
|
|
355
|
-
# *
|
|
356
|
-
# * 0
|
|
357
|
-
# * 1
|
|
395
|
+
# * <code>-1</code>, if `self` is less than `other`.
|
|
396
|
+
# * `0`, if `self` is equal to `other`.
|
|
397
|
+
# * `1`, if `self` is greater then `other`.
|
|
358
398
|
# * `nil`, if `self` and `other` are incomparable.
|
|
359
399
|
#
|
|
360
400
|
# Examples:
|
|
361
401
|
#
|
|
362
402
|
# 1 <=> 2 # => -1
|
|
363
403
|
# 1 <=> 1 # => 0
|
|
364
|
-
# 1 <=> 0 # => 1
|
|
365
|
-
# 1 <=> 'foo' # => nil
|
|
366
|
-
#
|
|
367
404
|
# 1 <=> 1.0 # => 0
|
|
368
405
|
# 1 <=> Rational(1, 1) # => 0
|
|
369
406
|
# 1 <=> Complex(1, 0) # => 0
|
|
407
|
+
# 1 <=> 0 # => 1
|
|
408
|
+
# 1 <=> 'foo' # => nil
|
|
370
409
|
#
|
|
371
|
-
#
|
|
410
|
+
# Class Integer includes module Comparable, each of whose methods uses
|
|
411
|
+
# Integer#<=> for comparison.
|
|
372
412
|
#
|
|
373
413
|
def <=>: (Integer | Rational) -> Integer
|
|
374
414
|
| (untyped) -> Integer?
|
|
@@ -463,8 +503,8 @@ class Integer < Numeric
|
|
|
463
503
|
# n[2] # => 0
|
|
464
504
|
# n[3] # => 0
|
|
465
505
|
#
|
|
466
|
-
# In principle,
|
|
467
|
-
# always returns zero:
|
|
506
|
+
# In principle, <code>n[i]</code> is equivalent to <code>(n >> i) & 1</code>.
|
|
507
|
+
# Thus, negative index always returns zero:
|
|
468
508
|
#
|
|
469
509
|
# 255[-1] # => 0
|
|
470
510
|
#
|
|
@@ -475,8 +515,9 @@ class Integer < Numeric
|
|
|
475
515
|
# "%010b" % n[0, 10] # => "0000111000"
|
|
476
516
|
# "%010b" % n[4, 10] # => "0000000011"
|
|
477
517
|
#
|
|
478
|
-
# With argument `range`, returns
|
|
479
|
-
#
|
|
518
|
+
# With argument `range`, returns <code>range.size</code> bits from `self`,
|
|
519
|
+
# beginning at <code>range.begin</code> and including bits of greater
|
|
520
|
+
# significance:
|
|
480
521
|
#
|
|
481
522
|
# n = 0b111000 # => 56
|
|
482
523
|
# "%010b" % n[0..9] # => "0000111000"
|
|
@@ -515,8 +556,6 @@ class Integer < Numeric
|
|
|
515
556
|
#
|
|
516
557
|
def abs: () -> Integer
|
|
517
558
|
|
|
518
|
-
def abs2: () -> Integer
|
|
519
|
-
|
|
520
559
|
# <!--
|
|
521
560
|
# rdoc-file=numeric.c
|
|
522
561
|
# - allbits?(mask) -> true or false
|
|
@@ -540,8 +579,6 @@ class Integer < Numeric
|
|
|
540
579
|
#
|
|
541
580
|
def allbits?: (int mask) -> bool
|
|
542
581
|
|
|
543
|
-
def angle: () -> (Integer | Float)
|
|
544
|
-
|
|
545
582
|
# <!--
|
|
546
583
|
# rdoc-file=numeric.c
|
|
547
584
|
# - anybits?(mask) -> true or false
|
|
@@ -576,7 +613,7 @@ class Integer < Numeric
|
|
|
576
613
|
# significant bit has bit position 1). If there is no such bit (zero or minus
|
|
577
614
|
# one), returns zero.
|
|
578
615
|
#
|
|
579
|
-
# This method returns
|
|
616
|
+
# This method returns <code>ceil(log2(self < 0 ? -self : self + 1))</code>>.
|
|
580
617
|
#
|
|
581
618
|
# (-2**1000-1).bit_length # => 1001
|
|
582
619
|
# (-2**1000).bit_length # => 1000
|
|
@@ -629,7 +666,7 @@ class Integer < Numeric
|
|
|
629
666
|
#
|
|
630
667
|
# * When `self` is non-zero and `ndigits` is negative,
|
|
631
668
|
# returns a value based on a computed granularity:
|
|
632
|
-
# * The granularity is
|
|
669
|
+
# * The granularity is <code>10 ** ndigits.abs</code>.
|
|
633
670
|
# * The returned value is the smallest multiple of the granularity
|
|
634
671
|
# that is greater than or equal to `self`.
|
|
635
672
|
# Examples with positive `self`:
|
|
@@ -706,10 +743,6 @@ class Integer < Numeric
|
|
|
706
743
|
#
|
|
707
744
|
def coerce: (Numeric) -> [ Numeric, Numeric ]
|
|
708
745
|
|
|
709
|
-
def conj: () -> Integer
|
|
710
|
-
|
|
711
|
-
def conjugate: () -> Integer
|
|
712
|
-
|
|
713
746
|
# <!--
|
|
714
747
|
# rdoc-file=numeric.rb
|
|
715
748
|
# - denominator -> 1
|
|
@@ -755,7 +788,7 @@ class Integer < Numeric
|
|
|
755
788
|
# rdoc-file=numeric.c
|
|
756
789
|
# - divmod(other) -> array
|
|
757
790
|
# -->
|
|
758
|
-
# Returns a 2-element array
|
|
791
|
+
# Returns a 2-element array <code>[q, r]</code>, where
|
|
759
792
|
#
|
|
760
793
|
# q = (self/other).floor # Quotient
|
|
761
794
|
# r = self % other # Remainder
|
|
@@ -801,10 +834,6 @@ class Integer < Numeric
|
|
|
801
834
|
def downto: (Numeric limit) { (Integer) -> void } -> Integer
|
|
802
835
|
| (Numeric limit) -> ::Enumerator[Integer, self]
|
|
803
836
|
|
|
804
|
-
def dup: () -> self
|
|
805
|
-
|
|
806
|
-
def eql?: (untyped) -> bool
|
|
807
|
-
|
|
808
837
|
# <!--
|
|
809
838
|
# rdoc-file=numeric.rb
|
|
810
839
|
# - even? -> true or false
|
|
@@ -829,8 +858,6 @@ class Integer < Numeric
|
|
|
829
858
|
#
|
|
830
859
|
def fdiv: (Numeric) -> Float
|
|
831
860
|
|
|
832
|
-
def finite?: () -> bool
|
|
833
|
-
|
|
834
861
|
# <!--
|
|
835
862
|
# rdoc-file=numeric.c
|
|
836
863
|
# - floor(ndigits = 0) -> integer
|
|
@@ -850,7 +877,7 @@ class Integer < Numeric
|
|
|
850
877
|
#
|
|
851
878
|
# * When `self` is non-zero and `ndigits` is negative,
|
|
852
879
|
# returns a value based on a computed granularity:
|
|
853
|
-
# * The granularity is
|
|
880
|
+
# * The granularity is <code>10 ** ndigits.abs</code>.
|
|
854
881
|
# * The returned value is the largest multiple of the granularity
|
|
855
882
|
# that is less than or equal to `self`.
|
|
856
883
|
# Examples with positive `self`:
|
|
@@ -901,14 +928,6 @@ class Integer < Numeric
|
|
|
901
928
|
#
|
|
902
929
|
def gcdlcm: (Integer) -> [ Integer, Integer ]
|
|
903
930
|
|
|
904
|
-
def i: () -> Complex
|
|
905
|
-
|
|
906
|
-
def imag: () -> Integer
|
|
907
|
-
|
|
908
|
-
def imaginary: () -> Integer
|
|
909
|
-
|
|
910
|
-
def infinite?: () -> Integer?
|
|
911
|
-
|
|
912
931
|
# <!-- rdoc-file=numeric.c -->
|
|
913
932
|
# Returns a string containing the place-value representation of `self` in radix
|
|
914
933
|
# `base` (in 2..36).
|
|
@@ -955,7 +974,7 @@ class Integer < Numeric
|
|
|
955
974
|
def magnitude: () -> Integer
|
|
956
975
|
|
|
957
976
|
# <!-- rdoc-file=numeric.c -->
|
|
958
|
-
# Returns `self` modulo `other` as a real
|
|
977
|
+
# Returns `self` modulo `other` as a real numeric (Integer, Float, or Rational).
|
|
959
978
|
#
|
|
960
979
|
# For integer `n` and real number `r`, these expressions are equivalent:
|
|
961
980
|
#
|
|
@@ -983,7 +1002,7 @@ class Integer < Numeric
|
|
|
983
1002
|
def negative?: () -> bool
|
|
984
1003
|
|
|
985
1004
|
# <!-- rdoc-file=numeric.c -->
|
|
986
|
-
# Returns the successor integer of `self` (equivalent to
|
|
1005
|
+
# Returns the successor integer of `self` (equivalent to <code>self + 1</code>):
|
|
987
1006
|
#
|
|
988
1007
|
# 1.succ #=> 2
|
|
989
1008
|
# -1.succ #=> 0
|
|
@@ -1015,8 +1034,6 @@ class Integer < Numeric
|
|
|
1015
1034
|
#
|
|
1016
1035
|
def nobits?: (int mask) -> bool
|
|
1017
1036
|
|
|
1018
|
-
def nonzero?: () -> self?
|
|
1019
|
-
|
|
1020
1037
|
# <!--
|
|
1021
1038
|
# rdoc-file=numeric.rb
|
|
1022
1039
|
# - numerator -> self
|
|
@@ -1041,8 +1058,6 @@ class Integer < Numeric
|
|
|
1041
1058
|
#
|
|
1042
1059
|
def ord: () -> Integer
|
|
1043
1060
|
|
|
1044
|
-
alias phase angle
|
|
1045
|
-
|
|
1046
1061
|
def polar: () -> [ Integer, Integer | Float ]
|
|
1047
1062
|
|
|
1048
1063
|
def positive?: () -> bool
|
|
@@ -1067,7 +1082,7 @@ class Integer < Numeric
|
|
|
1067
1082
|
# rdoc-file=numeric.c
|
|
1068
1083
|
# - pred -> next_integer
|
|
1069
1084
|
# -->
|
|
1070
|
-
# Returns the predecessor of `self` (equivalent to
|
|
1085
|
+
# Returns the predecessor of `self` (equivalent to <code>self - 1</code>):
|
|
1071
1086
|
#
|
|
1072
1087
|
# 1.pred #=> 0
|
|
1073
1088
|
# -1.pred #=> -2
|
|
@@ -1091,14 +1106,8 @@ class Integer < Numeric
|
|
|
1091
1106
|
#
|
|
1092
1107
|
def rationalize: (?Numeric eps) -> Rational
|
|
1093
1108
|
|
|
1094
|
-
def real: () -> self
|
|
1095
|
-
|
|
1096
|
-
def real?: () -> true
|
|
1097
|
-
|
|
1098
1109
|
def rect: () -> [ Integer, Numeric ]
|
|
1099
1110
|
|
|
1100
|
-
alias rectangular rect
|
|
1101
|
-
|
|
1102
1111
|
# <!--
|
|
1103
1112
|
# rdoc-file=numeric.c
|
|
1104
1113
|
# - remainder(other) -> real_number
|
|
@@ -1132,8 +1141,8 @@ class Integer < Numeric
|
|
|
1132
1141
|
# Returns `self` rounded to the nearest value with a precision of `ndigits`
|
|
1133
1142
|
# decimal digits.
|
|
1134
1143
|
#
|
|
1135
|
-
# When `ndigits` is negative, the returned value has at least
|
|
1136
|
-
# trailing zeros:
|
|
1144
|
+
# When `ndigits` is negative, the returned value has at least
|
|
1145
|
+
# <code>ndigits.abs</code> trailing zeros:
|
|
1137
1146
|
#
|
|
1138
1147
|
# 555.round(-1) # => 560
|
|
1139
1148
|
# 555.round(-2) # => 600
|
|
@@ -1150,17 +1159,18 @@ class Integer < Numeric
|
|
|
1150
1159
|
# If keyword argument `half` is given, and `self` is equidistant from the two
|
|
1151
1160
|
# candidate values, the rounding is according to the given `half` value:
|
|
1152
1161
|
#
|
|
1153
|
-
# *
|
|
1162
|
+
# * <code>:up</code> or `nil`: round away from zero:
|
|
1154
1163
|
#
|
|
1155
1164
|
# 25.round(-1, half: :up) # => 30
|
|
1156
1165
|
# (-25).round(-1, half: :up) # => -30
|
|
1157
1166
|
#
|
|
1158
|
-
# *
|
|
1167
|
+
# * <code>:down</code>: round toward zero:
|
|
1159
1168
|
#
|
|
1160
1169
|
# 25.round(-1, half: :down) # => 20
|
|
1161
1170
|
# (-25).round(-1, half: :down) # => -20
|
|
1162
1171
|
#
|
|
1163
|
-
# *
|
|
1172
|
+
# * <code>:even</code>: round toward the candidate whose last nonzero digit is
|
|
1173
|
+
# even:
|
|
1164
1174
|
#
|
|
1165
1175
|
# 25.round(-1, half: :even) # => 20
|
|
1166
1176
|
# 15.round(-1, half: :even) # => 20
|
|
@@ -1189,22 +1199,11 @@ class Integer < Numeric
|
|
|
1189
1199
|
#
|
|
1190
1200
|
def size: () -> Integer
|
|
1191
1201
|
|
|
1192
|
-
def step: () { (Integer) -> void } -> void
|
|
1193
|
-
| (Numeric limit, ?Integer step) { (Integer) -> void } -> void
|
|
1194
|
-
| (Numeric limit, ?Numeric step) { (Numeric) -> void } -> void
|
|
1195
|
-
| (to: Numeric, ?by: Integer) { (Integer) -> void } -> void
|
|
1196
|
-
| (by: Numeric, ?to: Numeric) { (Numeric) -> void } -> void
|
|
1197
|
-
| () -> Enumerator[Integer, bot]
|
|
1198
|
-
| (Numeric limit, ?Integer step) -> Enumerator[Integer]
|
|
1199
|
-
| (Numeric limit, ?Numeric step) -> Enumerator[Numeric]
|
|
1200
|
-
| (to: Numeric, ?by: Integer) -> Enumerator[Integer]
|
|
1201
|
-
| (by: Numeric, ?to: Numeric) -> Enumerator[Numeric]
|
|
1202
|
-
|
|
1203
1202
|
# <!--
|
|
1204
1203
|
# rdoc-file=numeric.c
|
|
1205
1204
|
# - succ -> next_integer
|
|
1206
1205
|
# -->
|
|
1207
|
-
# Returns the successor integer of `self` (equivalent to
|
|
1206
|
+
# Returns the successor integer of `self` (equivalent to <code>self + 1</code>):
|
|
1208
1207
|
#
|
|
1209
1208
|
# 1.succ #=> 2
|
|
1210
1209
|
# -1.succ #=> 0
|
|
@@ -1218,7 +1217,8 @@ class Integer < Numeric
|
|
|
1218
1217
|
# - times {|i| ... } -> self
|
|
1219
1218
|
# - times -> enumerator
|
|
1220
1219
|
# -->
|
|
1221
|
-
# Calls the given block `self` times with each integer in
|
|
1220
|
+
# Calls the given block `self` times with each integer in
|
|
1221
|
+
# <code>(0..self-1)</code>:
|
|
1222
1222
|
#
|
|
1223
1223
|
# a = []
|
|
1224
1224
|
# 5.times {|i| a.push(i) } # => 5
|
|
@@ -1229,8 +1229,6 @@ class Integer < Numeric
|
|
|
1229
1229
|
def times: () { (Integer) -> void } -> self
|
|
1230
1230
|
| () -> ::Enumerator[Integer, self]
|
|
1231
1231
|
|
|
1232
|
-
def to_c: () -> Complex
|
|
1233
|
-
|
|
1234
1232
|
# <!--
|
|
1235
1233
|
# rdoc-file=numeric.c
|
|
1236
1234
|
# - to_f -> float
|
|
@@ -1336,8 +1334,8 @@ class Integer < Numeric
|
|
|
1336
1334
|
# Returns `self` truncated (toward zero) to a precision of `ndigits` decimal
|
|
1337
1335
|
# digits.
|
|
1338
1336
|
#
|
|
1339
|
-
# When `ndigits` is negative, the returned value has at least
|
|
1340
|
-
# trailing zeros:
|
|
1337
|
+
# When `ndigits` is negative, the returned value has at least
|
|
1338
|
+
# <code>ndigits.abs</code> trailing zeros:
|
|
1341
1339
|
#
|
|
1342
1340
|
# 555.truncate(-1) # => 550
|
|
1343
1341
|
# 555.truncate(-2) # => 500
|