rbs 2.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +5 -0
- data/CHANGELOG.md +23 -0
- data/README.md +6 -1
- data/core/array.rbs +2866 -1086
- data/core/basic_object.rbs +150 -30
- data/core/binding.rbs +33 -0
- data/core/builtin.rbs +4 -4
- data/core/class.rbs +43 -5
- data/core/comparable.rbs +57 -0
- data/core/complex.rbs +170 -4
- data/core/constants.rbs +51 -0
- data/core/deprecated.rbs +7 -0
- data/core/dir.rbs +305 -20
- data/core/encoding.rbs +472 -77
- data/core/enumerable.rbs +2173 -234
- data/core/enumerator.rbs +448 -182
- data/core/env.rbs +448 -1
- data/core/errno.rbs +1 -10
- data/core/errors.rbs +152 -2
- data/core/exception.rbs +201 -127
- data/core/false_class.rbs +27 -0
- data/core/fiber.rbs +118 -37
- data/core/fiber_error.rbs +8 -9
- data/core/file.rbs +1059 -139
- data/core/file_test.rbs +287 -32
- data/core/float.rbs +776 -300
- data/core/gc.rbs +185 -34
- data/core/global_variables.rbs +5 -1
- data/core/hash.rbs +1582 -649
- data/core/integer.rbs +974 -204
- data/core/io/buffer.rbs +710 -0
- data/core/io/wait.rbs +29 -8
- data/core/io.rbs +2438 -417
- data/core/kernel.rbs +2315 -316
- data/core/marshal.rbs +37 -2
- data/core/match_data.rbs +123 -6
- data/core/math.rbs +126 -6
- data/core/method.rbs +226 -102
- data/core/module.rbs +421 -45
- data/core/nil_class.rbs +64 -0
- data/core/numeric.rbs +620 -142
- data/core/object.rbs +453 -81
- data/core/object_space.rbs +92 -2
- data/core/proc.rbs +482 -285
- data/core/process.rbs +443 -34
- data/core/ractor.rbs +232 -9
- data/core/random.rbs +151 -52
- data/core/range.rbs +885 -160
- data/core/rational.rbs +122 -6
- data/core/rb_config.rbs +14 -4
- data/core/refinement.rbs +44 -0
- data/core/regexp.rbs +156 -14
- data/core/ruby_vm.rbs +42 -3
- data/core/signal.rbs +78 -39
- data/core/string.rbs +2123 -567
- data/core/string_io.rbs +204 -0
- data/core/struct.rbs +283 -28
- data/core/symbol.rbs +304 -30
- data/core/thread.rbs +1288 -688
- data/core/thread_group.rbs +66 -10
- data/core/time.rbs +643 -217
- data/core/trace_point.rbs +100 -12
- data/core/true_class.rbs +24 -0
- data/core/unbound_method.rbs +73 -7
- data/core/warning.rbs +37 -12
- data/docs/CONTRIBUTING.md +40 -34
- data/docs/stdlib.md +3 -102
- data/lib/rbs/annotate/annotations.rb +197 -0
- data/lib/rbs/annotate/formatter.rb +80 -0
- data/lib/rbs/annotate/rdoc_annotator.rb +398 -0
- data/lib/rbs/annotate/rdoc_source.rb +120 -0
- data/lib/rbs/annotate.rb +6 -0
- data/lib/rbs/cli.rb +45 -1
- data/lib/rbs/definition_builder.rb +5 -1
- data/lib/rbs/location_aux.rb +12 -0
- data/lib/rbs/prototype/rb.rb +12 -0
- data/lib/rbs/version.rb +1 -1
- data/sig/annotate/annotations.rbs +102 -0
- data/sig/annotate/formatter.rbs +24 -0
- data/sig/annotate/rdoc_annotater.rbs +82 -0
- data/sig/annotate/rdoc_source.rbs +30 -0
- data/sig/cli.rbs +2 -0
- data/sig/collection/{collections.rbs → sources.rbs} +0 -0
- data/sig/location.rbs +6 -0
- data/sig/method_types.rbs +5 -1
- data/sig/polyfill.rbs +78 -0
- data/stdlib/abbrev/0/abbrev.rbs +6 -0
- data/stdlib/abbrev/0/array.rbs +26 -0
- data/stdlib/base64/0/base64.rbs +31 -0
- data/stdlib/benchmark/0/benchmark.rbs +74 -3
- data/stdlib/bigdecimal/0/big_decimal.rbs +614 -165
- data/stdlib/bigdecimal-math/0/big_math.rbs +41 -64
- data/stdlib/cgi/0/core.rbs +59 -0
- data/stdlib/coverage/0/coverage.rbs +164 -2
- data/stdlib/csv/0/csv.rbs +2862 -398
- data/stdlib/date/0/date.rbs +483 -25
- data/stdlib/date/0/date_time.rbs +187 -12
- data/stdlib/dbm/0/dbm.rbs +152 -17
- data/stdlib/digest/0/digest.rbs +146 -0
- data/stdlib/erb/0/erb.rbs +65 -245
- data/stdlib/fiber/0/fiber.rbs +73 -91
- data/stdlib/fileutils/0/fileutils.rbs +301 -1
- data/stdlib/find/0/find.rbs +9 -0
- data/stdlib/forwardable/0/forwardable.rbs +65 -1
- data/stdlib/io-console/0/io-console.rbs +227 -15
- data/stdlib/ipaddr/0/ipaddr.rbs +161 -0
- data/stdlib/json/0/json.rbs +1146 -144
- data/stdlib/logger/0/formatter.rbs +24 -0
- data/stdlib/logger/0/log_device.rbs +64 -0
- data/stdlib/logger/0/logger.rbs +165 -13
- data/stdlib/logger/0/period.rbs +10 -0
- data/stdlib/logger/0/severity.rbs +26 -0
- data/stdlib/monitor/0/monitor.rbs +163 -0
- data/stdlib/mutex_m/0/mutex_m.rbs +35 -6
- data/stdlib/net-http/0/net-http.rbs +1492 -683
- data/stdlib/nkf/0/nkf.rbs +372 -0
- data/stdlib/objspace/0/objspace.rbs +149 -90
- data/stdlib/openssl/0/openssl.rbs +8108 -71
- data/stdlib/optparse/0/optparse.rbs +487 -19
- data/stdlib/pathname/0/pathname.rbs +425 -124
- data/stdlib/prettyprint/0/prettyprint.rbs +120 -99
- data/stdlib/prime/0/integer-extension.rbs +20 -2
- data/stdlib/prime/0/prime.rbs +88 -21
- data/stdlib/pstore/0/pstore.rbs +102 -0
- data/stdlib/pty/0/pty.rbs +64 -14
- data/stdlib/resolv/0/resolv.rbs +420 -31
- data/stdlib/rubygems/0/basic_specification.rbs +4 -1
- data/stdlib/rubygems/0/config_file.rbs +33 -1
- data/stdlib/rubygems/0/dependency_installer.rbs +4 -3
- data/stdlib/rubygems/0/installer.rbs +13 -1
- data/stdlib/rubygems/0/path_support.rbs +4 -1
- data/stdlib/rubygems/0/platform.rbs +5 -1
- data/stdlib/rubygems/0/request_set.rbs +44 -2
- data/stdlib/rubygems/0/requirement.rbs +65 -2
- data/stdlib/rubygems/0/rubygems.rbs +407 -0
- data/stdlib/rubygems/0/source_list.rbs +13 -0
- data/stdlib/rubygems/0/specification.rbs +21 -1
- data/stdlib/rubygems/0/stream_ui.rbs +3 -1
- data/stdlib/rubygems/0/uninstaller.rbs +8 -1
- data/stdlib/rubygems/0/version.rbs +60 -157
- data/stdlib/securerandom/0/securerandom.rbs +44 -0
- data/stdlib/set/0/set.rbs +420 -106
- data/stdlib/shellwords/0/shellwords.rbs +55 -77
- data/stdlib/singleton/0/singleton.rbs +20 -0
- data/stdlib/socket/0/addrinfo.rbs +210 -9
- data/stdlib/socket/0/basic_socket.rbs +103 -11
- data/stdlib/socket/0/ip_socket.rbs +31 -9
- data/stdlib/socket/0/socket.rbs +586 -38
- data/stdlib/socket/0/tcp_server.rbs +22 -2
- data/stdlib/socket/0/tcp_socket.rbs +12 -1
- data/stdlib/socket/0/udp_socket.rbs +25 -2
- data/stdlib/socket/0/unix_server.rbs +22 -2
- data/stdlib/socket/0/unix_socket.rbs +45 -5
- data/stdlib/strscan/0/string_scanner.rbs +210 -9
- data/stdlib/tempfile/0/tempfile.rbs +58 -10
- data/stdlib/time/0/time.rbs +208 -116
- data/stdlib/timeout/0/timeout.rbs +10 -0
- data/stdlib/tmpdir/0/tmpdir.rbs +13 -4
- data/stdlib/tsort/0/cyclic.rbs +1 -0
- data/stdlib/tsort/0/interfaces.rbs +1 -0
- data/stdlib/tsort/0/tsort.rbs +42 -0
- data/stdlib/uri/0/common.rbs +57 -8
- data/stdlib/uri/0/file.rbs +55 -109
- data/stdlib/uri/0/ftp.rbs +6 -3
- data/stdlib/uri/0/generic.rbs +556 -327
- data/stdlib/uri/0/http.rbs +26 -115
- data/stdlib/uri/0/https.rbs +8 -102
- data/stdlib/uri/0/ldap.rbs +143 -137
- data/stdlib/uri/0/ldaps.rbs +8 -102
- data/stdlib/uri/0/mailto.rbs +3 -0
- data/stdlib/uri/0/rfc2396_parser.rbs +66 -26
- data/stdlib/uri/0/ws.rbs +6 -3
- data/stdlib/uri/0/wss.rbs +5 -3
- data/stdlib/yaml/0/dbm.rbs +151 -87
- data/stdlib/yaml/0/store.rbs +6 -0
- data/stdlib/zlib/0/zlib.rbs +90 -31
- metadata +17 -5
- data/lib/rbs/location.rb +0 -221
data/core/kernel.rbs
CHANGED
@@ -1,133 +1,683 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
#
|
4
|
-
#
|
5
|
-
# The
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
1
|
+
# <!-- rdoc-file=object.c -->
|
2
|
+
# The Kernel module is included by class Object, so its methods are available in
|
3
|
+
# every Ruby object.
|
4
|
+
#
|
5
|
+
# The Kernel instance methods are documented in class Object while the module
|
6
|
+
# methods are documented here. These methods are called without a receiver and
|
7
|
+
# thus can be called in functional form:
|
8
|
+
#
|
9
|
+
# sprintf "%.1f", 1.234 #=> "1.2"
|
10
|
+
#
|
11
|
+
# ## What's Here
|
12
|
+
#
|
13
|
+
# Module Kernel provides methods that are useful for:
|
14
|
+
#
|
15
|
+
# * [Converting](#module-Kernel-label-Converting)
|
16
|
+
# * [Querying](#module-Kernel-label-Querying)
|
17
|
+
# * [Exiting](#module-Kernel-label-Exiting)
|
18
|
+
# * [Exceptions](#module-Kernel-label-Exceptions)
|
19
|
+
# * [IO](#module-Kernel-label-IO)
|
20
|
+
# * [Procs](#module-Kernel-label-Procs)
|
21
|
+
# * [Tracing](#module-Kernel-label-Tracing)
|
22
|
+
# * [Subprocesses](#module-Kernel-label-Subprocesses)
|
23
|
+
# * [Loading](#module-Kernel-label-Loading)
|
24
|
+
# * [Yielding](#module-Kernel-label-Yielding)
|
25
|
+
# * [Random Values](#module-Kernel-label-Random+Values)
|
26
|
+
# * [Other](#module-Kernel-label-Other)
|
27
|
+
#
|
28
|
+
#
|
29
|
+
# ### Converting
|
30
|
+
#
|
31
|
+
# [#Array](#method-i-Array)
|
32
|
+
# : Returns an Array based on the given argument.
|
33
|
+
#
|
34
|
+
# [#Complex](#method-i-Complex)
|
35
|
+
# : Returns a Complex based on the given arguments.
|
36
|
+
#
|
37
|
+
# [#Float](#method-i-Float)
|
38
|
+
# : Returns a Float based on the given arguments.
|
39
|
+
#
|
40
|
+
# [#Hash](#method-i-Hash)
|
41
|
+
# : Returns a Hash based on the given argument.
|
42
|
+
#
|
43
|
+
# [#Integer](#method-i-Integer)
|
44
|
+
# : Returns an Integer based on the given arguments.
|
45
|
+
#
|
46
|
+
# [#Rational](#method-i-Rational)
|
47
|
+
# : Returns a Rational based on the given arguments.
|
48
|
+
#
|
49
|
+
# [#String](#method-i-String)
|
50
|
+
# : Returns a String based on the given argument.
|
51
|
+
#
|
52
|
+
#
|
53
|
+
#
|
54
|
+
# ### Querying
|
55
|
+
#
|
56
|
+
# [#__callee__](#method-i-__callee__)
|
57
|
+
# : Returns the called name of the current method as a symbol.
|
58
|
+
#
|
59
|
+
# [#__dir__](#method-i-__dir__)
|
60
|
+
# : Returns the path to the directory from which the current method is
|
61
|
+
# called.
|
62
|
+
#
|
63
|
+
# [#__method__](#method-i-__method__)
|
64
|
+
# : Returns the name of the current method as a symbol.
|
65
|
+
#
|
66
|
+
# #autoload?
|
67
|
+
# : Returns the file to be loaded when the given module is referenced.
|
68
|
+
#
|
69
|
+
# #binding
|
70
|
+
# : Returns a Binding for the context at the point of call.
|
71
|
+
#
|
72
|
+
# #block_given?
|
73
|
+
# : Returns `true` if a block was passed to the calling method.
|
74
|
+
#
|
75
|
+
# #caller
|
76
|
+
# : Returns the current execution stack as an array of strings.
|
77
|
+
#
|
78
|
+
# #caller_locations
|
79
|
+
# : Returns the current execution stack as an array of
|
80
|
+
# Thread::Backtrace::Location objects.
|
81
|
+
#
|
82
|
+
# #class
|
83
|
+
# : Returns the class of `self`.
|
84
|
+
#
|
85
|
+
# #frozen?
|
86
|
+
# : Returns whether `self` is frozen.
|
87
|
+
#
|
88
|
+
# #global_variables
|
89
|
+
# : Returns an array of global variables as symbols.
|
90
|
+
#
|
91
|
+
# #local_variables
|
92
|
+
# : Returns an array of local variables as symbols.
|
93
|
+
#
|
94
|
+
# #test
|
95
|
+
# : Performs specified tests on the given single file or pair of files.
|
96
|
+
#
|
97
|
+
#
|
98
|
+
#
|
99
|
+
# ### Exiting
|
100
|
+
#
|
101
|
+
# #abort
|
102
|
+
# : Exits the current process after printing the given arguments.
|
103
|
+
#
|
104
|
+
# #at_exit
|
105
|
+
# : Executes the given block when the process exits.
|
106
|
+
#
|
107
|
+
# #exit
|
108
|
+
# : Exits the current process after calling any registered `at_exit`
|
109
|
+
# handlers.
|
110
|
+
#
|
111
|
+
# #exit!
|
112
|
+
# : Exits the current process without calling any registered `at_exit`
|
113
|
+
# handlers.
|
114
|
+
#
|
115
|
+
#
|
116
|
+
#
|
117
|
+
# ### Exceptions
|
118
|
+
#
|
119
|
+
# #catch
|
120
|
+
# : Executes the given block, possibly catching a thrown object.
|
121
|
+
#
|
122
|
+
# #raise (aliased as #fail)
|
123
|
+
# : Raises an exception based on the given arguments.
|
124
|
+
#
|
125
|
+
# #throw
|
126
|
+
# : Returns from the active catch block waiting for the given tag.
|
127
|
+
#
|
128
|
+
#
|
129
|
+
#
|
130
|
+
# ### IO
|
131
|
+
#
|
132
|
+
# #gets
|
133
|
+
# : Returns and assigns to `$_` the next line from the current input.
|
134
|
+
#
|
135
|
+
# #open
|
136
|
+
# : Creates an IO object connected to the given stream, file, or
|
137
|
+
# subprocess.
|
138
|
+
#
|
139
|
+
# #p
|
140
|
+
# : Prints the given objects' inspect output to the standard output.
|
141
|
+
#
|
142
|
+
# #pp
|
143
|
+
# : Prints the given objects in pretty form.
|
144
|
+
#
|
145
|
+
# #print
|
146
|
+
# : Prints the given objects to standard output without a newline.
|
147
|
+
#
|
148
|
+
# #printf
|
149
|
+
# : Prints the string resulting from applying the given format string to
|
150
|
+
# any additional arguments.
|
151
|
+
#
|
152
|
+
# #putc
|
153
|
+
# : Equivalent to <tt.$stdout.putc(object)</tt> for the given object.
|
154
|
+
#
|
155
|
+
# #puts
|
156
|
+
# : Equivalent to `$stdout.puts(*objects)` for the given objects.
|
157
|
+
#
|
158
|
+
# #readline
|
159
|
+
# : Similar to #gets, but raises an exception at the end of file.
|
160
|
+
#
|
161
|
+
# #readlines
|
162
|
+
# : Returns an array of the remaining lines from the current input.
|
163
|
+
#
|
164
|
+
# #select
|
165
|
+
# : Same as IO.select.
|
166
|
+
#
|
167
|
+
#
|
168
|
+
#
|
169
|
+
# ### Procs
|
170
|
+
#
|
171
|
+
# #lambda
|
172
|
+
# : Returns a lambda proc for the given block.
|
173
|
+
#
|
174
|
+
# #proc
|
175
|
+
# : Returns a new Proc; equivalent to Proc.new.
|
176
|
+
#
|
177
|
+
#
|
178
|
+
#
|
179
|
+
# ### Tracing
|
180
|
+
#
|
181
|
+
# #set_trace_func
|
182
|
+
# : Sets the given proc as the handler for tracing, or disables tracing if
|
183
|
+
# given `nil`.
|
184
|
+
#
|
185
|
+
# #trace_var
|
186
|
+
# : Starts tracing assignments to the given global variable.
|
187
|
+
#
|
188
|
+
# #untrace_var
|
189
|
+
# : Disables tracing of assignments to the given global variable.
|
190
|
+
#
|
191
|
+
#
|
192
|
+
#
|
193
|
+
# ### Subprocesses
|
194
|
+
#
|
195
|
+
# #`cmd`
|
196
|
+
# : Returns the standard output of running `cmd` in a subshell.
|
197
|
+
#
|
198
|
+
# #exec
|
199
|
+
# : Replaces current process with a new process.
|
200
|
+
#
|
201
|
+
# #fork
|
202
|
+
# : Forks the current process into two processes.
|
203
|
+
#
|
204
|
+
# #spawn
|
205
|
+
# : Executes the given command and returns its pid without waiting for
|
206
|
+
# completion.
|
207
|
+
#
|
208
|
+
# #system
|
209
|
+
# : Executes the given command in a subshell.
|
210
|
+
#
|
211
|
+
#
|
212
|
+
#
|
213
|
+
# ### Loading
|
214
|
+
#
|
215
|
+
# #autoload
|
216
|
+
# : Registers the given file to be loaded when the given constant is first
|
217
|
+
# referenced.
|
218
|
+
#
|
219
|
+
# #load
|
220
|
+
# : Loads the given Ruby file.
|
221
|
+
#
|
222
|
+
# #require
|
223
|
+
# : Loads the given Ruby file unless it has already been loaded.
|
224
|
+
#
|
225
|
+
# #require_relative
|
226
|
+
# : Loads the Ruby file path relative to the calling file, unless it has
|
227
|
+
# already been loaded.
|
228
|
+
#
|
229
|
+
#
|
230
|
+
#
|
231
|
+
# ### Yielding
|
232
|
+
#
|
233
|
+
# #tap
|
234
|
+
# : Yields `self` to the given block; returns `self`.
|
235
|
+
#
|
236
|
+
# #then (aliased as #yield_self)
|
237
|
+
# : Yields `self` to the block and returns the result of the block.
|
238
|
+
#
|
239
|
+
#
|
240
|
+
#
|
241
|
+
# ### Random Values
|
242
|
+
#
|
243
|
+
# #rand
|
244
|
+
# : Returns a pseudo-random floating point number strictly between 0.0 and
|
245
|
+
# 1.0.
|
246
|
+
#
|
247
|
+
# #srand
|
248
|
+
# : Seeds the pseudo-random number generator with the given number.
|
249
|
+
#
|
250
|
+
#
|
251
|
+
#
|
252
|
+
# ### Other
|
253
|
+
#
|
254
|
+
# #eval
|
255
|
+
# : Evaluates the given string as Ruby code.
|
256
|
+
#
|
257
|
+
# #loop
|
258
|
+
# : Repeatedly executes the given block.
|
259
|
+
#
|
260
|
+
# #sleep
|
261
|
+
# : Suspends the current thread for the given number of seconds.
|
262
|
+
#
|
263
|
+
# #sprintf (aliased as #format)
|
264
|
+
# : Returns the string resulting from applying the given format string to
|
265
|
+
# any additional arguments.
|
266
|
+
#
|
267
|
+
# #syscall
|
268
|
+
# : Runs an operating system call.
|
269
|
+
#
|
270
|
+
# #trap
|
271
|
+
# : Specifies the handling of system signals.
|
272
|
+
#
|
273
|
+
# #warn
|
274
|
+
# : Issue a warning based on the given messages and options.
|
275
|
+
#
|
276
|
+
%a{annotate:rdoc:source:from=object.c}
|
13
277
|
module Kernel : BasicObject
|
14
278
|
private
|
15
279
|
|
280
|
+
# <!--
|
281
|
+
# rdoc-file=vm_backtrace.c
|
282
|
+
# - caller(start=1, length=nil) -> array or nil
|
283
|
+
# - caller(range) -> array or nil
|
284
|
+
# -->
|
285
|
+
# Returns the current execution stack---an array containing strings in the form
|
286
|
+
# `file:line` or `file:line: in `method'`.
|
287
|
+
#
|
288
|
+
# The optional *start* parameter determines the number of initial stack entries
|
289
|
+
# to omit from the top of the stack.
|
290
|
+
#
|
291
|
+
# A second optional `length` parameter can be used to limit how many entries are
|
292
|
+
# returned from the stack.
|
293
|
+
#
|
294
|
+
# Returns `nil` if *start* is greater than the size of current execution stack.
|
295
|
+
#
|
296
|
+
# Optionally you can pass a range, which will return an array containing the
|
297
|
+
# entries within the specified range.
|
298
|
+
#
|
299
|
+
# def a(skip)
|
300
|
+
# caller(skip)
|
301
|
+
# end
|
302
|
+
# def b(skip)
|
303
|
+
# a(skip)
|
304
|
+
# end
|
305
|
+
# def c(skip)
|
306
|
+
# b(skip)
|
307
|
+
# end
|
308
|
+
# c(0) #=> ["prog:2:in `a'", "prog:5:in `b'", "prog:8:in `c'", "prog:10:in `<main>'"]
|
309
|
+
# c(1) #=> ["prog:5:in `b'", "prog:8:in `c'", "prog:11:in `<main>'"]
|
310
|
+
# c(2) #=> ["prog:8:in `c'", "prog:12:in `<main>'"]
|
311
|
+
# c(3) #=> ["prog:13:in `<main>'"]
|
312
|
+
# c(4) #=> []
|
313
|
+
# c(5) #=> nil
|
314
|
+
#
|
16
315
|
def self?.caller: (Integer start_or_range, ?Integer length) -> ::Array[String]?
|
17
|
-
|
18
|
-
|
316
|
+
| (::Range[Integer] start_or_range) -> ::Array[String]?
|
317
|
+
| () -> ::Array[String]
|
19
318
|
|
319
|
+
# <!--
|
320
|
+
# rdoc-file=vm_backtrace.c
|
321
|
+
# - caller_locations(start=1, length=nil) -> array or nil
|
322
|
+
# - caller_locations(range) -> array or nil
|
323
|
+
# -->
|
324
|
+
# Returns the current execution stack---an array containing backtrace location
|
325
|
+
# objects.
|
326
|
+
#
|
327
|
+
# See Thread::Backtrace::Location for more information.
|
328
|
+
#
|
329
|
+
# The optional *start* parameter determines the number of initial stack entries
|
330
|
+
# to omit from the top of the stack.
|
331
|
+
#
|
332
|
+
# A second optional `length` parameter can be used to limit how many entries are
|
333
|
+
# returned from the stack.
|
334
|
+
#
|
335
|
+
# Returns `nil` if *start* is greater than the size of current execution stack.
|
336
|
+
#
|
337
|
+
# Optionally you can pass a range, which will return an array containing the
|
338
|
+
# entries within the specified range.
|
339
|
+
#
|
20
340
|
def self?.caller_locations: (?Integer start_or_range, ?Integer length) -> ::Array[Thread::Backtrace::Location]?
|
21
|
-
|
22
|
-
|
23
|
-
def self?.catch: [T] (T tag) { (T tag) -> untyped } -> untyped
|
24
|
-
| () { (Object tag) -> untyped } -> untyped
|
341
|
+
| (?::Range[Integer] start_or_range) -> ::Array[Thread::Backtrace::Location]?
|
25
342
|
|
26
|
-
#
|
343
|
+
# <!--
|
344
|
+
# rdoc-file=vm_eval.c
|
345
|
+
# - catch([tag]) {|tag| block } -> obj
|
346
|
+
# -->
|
347
|
+
# `catch` executes its block. If `throw` is not called, the block executes
|
348
|
+
# normally, and `catch` returns the value of the last expression evaluated.
|
349
|
+
#
|
350
|
+
# catch(1) { 123 } # => 123
|
351
|
+
#
|
352
|
+
# If `throw(tag2, val)` is called, Ruby searches up its stack for a `catch`
|
353
|
+
# block whose `tag` has the same `object_id` as *tag2*. When found, the block
|
354
|
+
# stops executing and returns *val* (or `nil` if no second argument was given to
|
355
|
+
# `throw`).
|
356
|
+
#
|
357
|
+
# catch(1) { throw(1, 456) } # => 456
|
358
|
+
# catch(1) { throw(1) } # => nil
|
359
|
+
#
|
360
|
+
# When `tag` is passed as the first argument, `catch` yields it as the parameter
|
361
|
+
# of the block.
|
362
|
+
#
|
363
|
+
# catch(1) {|x| x + 2 } # => 3
|
364
|
+
#
|
365
|
+
# When no `tag` is given, `catch` yields a new unique object (as from
|
366
|
+
# `Object.new`) as the block parameter. This object can then be used as the
|
367
|
+
# argument to `throw`, and will match the correct `catch` block.
|
368
|
+
#
|
369
|
+
# catch do |obj_A|
|
370
|
+
# catch do |obj_B|
|
371
|
+
# throw(obj_B, 123)
|
372
|
+
# puts "This puts is not reached"
|
373
|
+
# end
|
374
|
+
#
|
375
|
+
# puts "This puts is displayed"
|
376
|
+
# 456
|
377
|
+
# end
|
378
|
+
#
|
379
|
+
# # => 456
|
27
380
|
#
|
28
|
-
#
|
381
|
+
# catch do |obj_A|
|
382
|
+
# catch do |obj_B|
|
383
|
+
# throw(obj_A, 123)
|
384
|
+
# puts "This puts is still not reached"
|
385
|
+
# end
|
29
386
|
#
|
30
|
-
#
|
387
|
+
# puts "Now this puts is also not reached"
|
388
|
+
# 456
|
389
|
+
# end
|
31
390
|
#
|
32
|
-
#
|
391
|
+
# # => 123
|
33
392
|
#
|
34
|
-
|
35
|
-
|
36
|
-
def `class`: () -> untyped
|
393
|
+
def self?.catch: [T] (T tag) { (T tag) -> untyped } -> untyped
|
394
|
+
| () { (Object tag) -> untyped } -> untyped
|
37
395
|
|
38
|
-
|
39
|
-
|
396
|
+
# <!--
|
397
|
+
# rdoc-file=kernel.rb
|
398
|
+
# - obj.class -> class
|
399
|
+
# -->
|
400
|
+
# Returns the class of *obj*. This method must always be called with an explicit
|
401
|
+
# receiver, as #class is also a reserved word in Ruby.
|
402
|
+
#
|
403
|
+
# 1.class #=> Integer
|
404
|
+
# self.class #=> Object
|
405
|
+
#
|
406
|
+
def class: () -> untyped
|
40
407
|
|
408
|
+
# <!--
|
409
|
+
# rdoc-file=vm_eval.c
|
410
|
+
# - eval(string [, binding [, filename [,lineno]]]) -> obj
|
411
|
+
# -->
|
412
|
+
# Evaluates the Ruby expression(s) in *string*. If *binding* is given, which
|
413
|
+
# must be a Binding object, the evaluation is performed in its context. If the
|
414
|
+
# optional *filename* and *lineno* parameters are present, they will be used
|
415
|
+
# when reporting syntax errors.
|
416
|
+
#
|
417
|
+
# def get_binding(str)
|
418
|
+
# return binding
|
419
|
+
# end
|
420
|
+
# str = "hello"
|
421
|
+
# eval "str + ' Fred'" #=> "hello Fred"
|
422
|
+
# eval "str + ' Fred'", get_binding("bye") #=> "bye Fred"
|
423
|
+
#
|
41
424
|
def self?.eval: (String arg0, ?Binding arg1, ?String filename, ?Integer lineno) -> untyped
|
42
425
|
|
43
|
-
#
|
44
|
-
#
|
45
|
-
#
|
46
|
-
#
|
47
|
-
#
|
48
|
-
#
|
49
|
-
#
|
50
|
-
#
|
51
|
-
#
|
52
|
-
#
|
53
|
-
#
|
54
|
-
#
|
55
|
-
#
|
56
|
-
#
|
426
|
+
# <!--
|
427
|
+
# rdoc-file=vm_eval.c
|
428
|
+
# - block_given? -> true or false
|
429
|
+
# -->
|
430
|
+
# Returns `true` if `yield` would execute a block in the current context. The
|
431
|
+
# `iterator?` form is mildly deprecated.
|
432
|
+
#
|
433
|
+
# def try
|
434
|
+
# if block_given?
|
435
|
+
# yield
|
436
|
+
# else
|
437
|
+
# "no block"
|
438
|
+
# end
|
439
|
+
# end
|
440
|
+
# try #=> "no block"
|
441
|
+
# try { "hello" } #=> "hello"
|
442
|
+
# try do "hello" end #=> "hello"
|
443
|
+
#
|
57
444
|
def self?.block_given?: () -> bool
|
58
445
|
|
446
|
+
# <!--
|
447
|
+
# rdoc-file=vm_eval.c
|
448
|
+
# - local_variables -> array
|
449
|
+
# -->
|
59
450
|
# Returns the names of the current local variables.
|
60
451
|
#
|
61
|
-
#
|
62
|
-
#
|
63
|
-
#
|
64
|
-
#
|
65
|
-
#
|
66
|
-
#
|
67
|
-
# ```
|
452
|
+
# fred = 1
|
453
|
+
# for i in 1..10
|
454
|
+
# # ...
|
455
|
+
# end
|
456
|
+
# local_variables #=> [:fred, :i]
|
457
|
+
#
|
68
458
|
def self?.local_variables: () -> ::Array[Symbol]
|
69
459
|
|
460
|
+
# <!--
|
461
|
+
# rdoc-file=random.c
|
462
|
+
# - srand(number = Random.new_seed) -> old_seed
|
463
|
+
# -->
|
464
|
+
# Seeds the system pseudo-random number generator, with `number`. The previous
|
465
|
+
# seed value is returned.
|
466
|
+
#
|
467
|
+
# If `number` is omitted, seeds the generator using a source of entropy provided
|
468
|
+
# by the operating system, if available (/dev/urandom on Unix systems or the RSA
|
469
|
+
# cryptographic provider on Windows), which is then combined with the time, the
|
470
|
+
# process id, and a sequence number.
|
471
|
+
#
|
472
|
+
# srand may be used to ensure repeatable sequences of pseudo-random numbers
|
473
|
+
# between different runs of the program. By setting the seed to a known value,
|
474
|
+
# programs can be made deterministic during testing.
|
475
|
+
#
|
476
|
+
# srand 1234 # => 268519324636777531569100071560086917274
|
477
|
+
# [ rand, rand ] # => [0.1915194503788923, 0.6221087710398319]
|
478
|
+
# [ rand(10), rand(1000) ] # => [4, 664]
|
479
|
+
# srand 1234 # => 1234
|
480
|
+
# [ rand, rand ] # => [0.1915194503788923, 0.6221087710398319]
|
481
|
+
#
|
70
482
|
def self?.srand: (?Numeric number) -> Numeric
|
71
483
|
|
484
|
+
# <!--
|
485
|
+
# rdoc-file=process.c
|
486
|
+
# - Kernel.fork [{ block }] -> integer or nil
|
487
|
+
# - Process.fork [{ block }] -> integer or nil
|
488
|
+
# -->
|
72
489
|
# Creates a subprocess. If a block is specified, that block is run in the
|
73
|
-
# subprocess, and the subprocess terminates with a status of zero.
|
74
|
-
#
|
75
|
-
# the
|
76
|
-
#
|
77
|
-
#
|
78
|
-
#
|
79
|
-
#
|
80
|
-
#
|
81
|
-
#
|
82
|
-
#
|
83
|
-
#
|
84
|
-
#
|
85
|
-
#
|
86
|
-
#
|
87
|
-
#
|
88
|
-
#
|
490
|
+
# subprocess, and the subprocess terminates with a status of zero. Otherwise,
|
491
|
+
# the `fork` call returns twice, once in the parent, returning the process ID of
|
492
|
+
# the child, and once in the child, returning *nil*. The child process can exit
|
493
|
+
# using Kernel.exit! to avoid running any `at_exit` functions. The parent
|
494
|
+
# process should use Process.wait to collect the termination statuses of its
|
495
|
+
# children or use Process.detach to register disinterest in their status;
|
496
|
+
# otherwise, the operating system may accumulate zombie processes.
|
497
|
+
#
|
498
|
+
# The thread calling fork is the only thread in the created child process. fork
|
499
|
+
# doesn't copy other threads.
|
500
|
+
#
|
501
|
+
# If fork is not usable, Process.respond_to?(:fork) returns false.
|
502
|
+
#
|
503
|
+
# Note that fork(2) is not available on some platforms like Windows and NetBSD
|
504
|
+
# 4. Therefore you should use spawn() instead of fork().
|
505
|
+
#
|
89
506
|
def self?.fork: () -> Integer?
|
90
|
-
|
507
|
+
| () { () -> untyped } -> Integer?
|
91
508
|
|
92
509
|
def initialize_copy: (self object) -> self
|
93
510
|
|
94
|
-
#
|
95
|
-
#
|
96
|
-
#
|
97
|
-
#
|
98
|
-
#
|
99
|
-
#
|
100
|
-
#
|
101
|
-
#
|
102
|
-
#
|
103
|
-
#
|
104
|
-
#
|
105
|
-
#
|
106
|
-
#
|
107
|
-
#
|
108
|
-
#
|
109
|
-
#
|
110
|
-
#
|
111
|
-
#
|
112
|
-
# ```
|
511
|
+
# <!--
|
512
|
+
# rdoc-file=object.c
|
513
|
+
# - Array(arg) -> array
|
514
|
+
# -->
|
515
|
+
# Returns `arg` as an Array.
|
516
|
+
#
|
517
|
+
# First tries to call `to_ary` on `arg`, then `to_a`. If `arg` does not respond
|
518
|
+
# to `to_ary` or `to_a`, returns an Array of length 1 containing `arg`.
|
519
|
+
#
|
520
|
+
# If `to_ary` or `to_a` returns something other than an Array, raises a
|
521
|
+
# TypeError.
|
522
|
+
#
|
523
|
+
# Array(["a", "b"]) #=> ["a", "b"]
|
524
|
+
# Array(1..5) #=> [1, 2, 3, 4, 5]
|
525
|
+
# Array(key: :value) #=> [[:key, :value]]
|
526
|
+
# Array(nil) #=> []
|
527
|
+
# Array(1) #=> [1]
|
528
|
+
#
|
113
529
|
def self?.Array: (NilClass x) -> [ ]
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
530
|
+
| [T] (::Array[T] x) -> ::Array[T]
|
531
|
+
| [T] (::Range[T] x) -> ::Array[T]
|
532
|
+
| [T] (_Each[T] x) -> ::Array[T]
|
533
|
+
| [K, V] (::Hash[K, V] x) -> ::Array[[ K, V ]]
|
534
|
+
| [T] (T x) -> ::Array[T]
|
119
535
|
|
536
|
+
# <!--
|
537
|
+
# rdoc-file=complex.c
|
538
|
+
# - Complex(x[, y], exception: true) -> numeric or nil
|
539
|
+
# -->
|
540
|
+
# Returns x+i*y;
|
541
|
+
#
|
542
|
+
# Complex(1, 2) #=> (1+2i)
|
543
|
+
# Complex('1+2i') #=> (1+2i)
|
544
|
+
# Complex(nil) #=> TypeError
|
545
|
+
# Complex(1, nil) #=> TypeError
|
546
|
+
#
|
547
|
+
# Complex(1, nil, exception: false) #=> nil
|
548
|
+
# Complex('1+2', exception: false) #=> nil
|
549
|
+
#
|
550
|
+
# Syntax of string form:
|
551
|
+
#
|
552
|
+
# string form = extra spaces , complex , extra spaces ;
|
553
|
+
# complex = real part | [ sign ] , imaginary part
|
554
|
+
# | real part , sign , imaginary part
|
555
|
+
# | rational , "@" , rational ;
|
556
|
+
# real part = rational ;
|
557
|
+
# imaginary part = imaginary unit | unsigned rational , imaginary unit ;
|
558
|
+
# rational = [ sign ] , unsigned rational ;
|
559
|
+
# unsigned rational = numerator | numerator , "/" , denominator ;
|
560
|
+
# numerator = integer part | fractional part | integer part , fractional part ;
|
561
|
+
# denominator = digits ;
|
562
|
+
# integer part = digits ;
|
563
|
+
# fractional part = "." , digits , [ ( "e" | "E" ) , [ sign ] , digits ] ;
|
564
|
+
# imaginary unit = "i" | "I" | "j" | "J" ;
|
565
|
+
# sign = "-" | "+" ;
|
566
|
+
# digits = digit , { digit | "_" , digit };
|
567
|
+
# digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
|
568
|
+
# extra spaces = ? \s* ? ;
|
569
|
+
#
|
570
|
+
# See String#to_c.
|
571
|
+
#
|
120
572
|
def self?.Complex: (Numeric | String x, ?Numeric | String y, ?exception: bool exception) -> Complex
|
121
573
|
|
574
|
+
# <!--
|
575
|
+
# rdoc-file=kernel.rb
|
576
|
+
# - Float(arg, exception: true) -> float or nil
|
577
|
+
# -->
|
578
|
+
# Returns *arg* converted to a float. Numeric types are converted directly, and
|
579
|
+
# with exception to String and `nil` the rest are converted using *arg*`.to_f`.
|
580
|
+
# Converting a String with invalid characters will result in a ArgumentError.
|
581
|
+
# Converting `nil` generates a TypeError. Exceptions can be suppressed by
|
582
|
+
# passing `exception: false`.
|
583
|
+
#
|
584
|
+
# Float(1) #=> 1.0
|
585
|
+
# Float("123.456") #=> 123.456
|
586
|
+
# Float("123.0_badstring") #=> ArgumentError: invalid value for Float(): "123.0_badstring"
|
587
|
+
# Float(nil) #=> TypeError: can't convert nil into Float
|
588
|
+
# Float("123.0_badstring", exception: false) #=> nil
|
589
|
+
#
|
122
590
|
def self?.Float: (Numeric | String x, ?exception: bool exception) -> Float
|
123
591
|
|
592
|
+
# <!--
|
593
|
+
# rdoc-file=object.c
|
594
|
+
# - Hash(arg) -> hash
|
595
|
+
# -->
|
596
|
+
# Converts *arg* to a Hash by calling *arg*`.to_hash`. Returns an empty Hash
|
597
|
+
# when *arg* is `nil` or `[]`.
|
598
|
+
#
|
599
|
+
# Hash([]) #=> {}
|
600
|
+
# Hash(nil) #=> {}
|
601
|
+
# Hash(key: :value) #=> {:key => :value}
|
602
|
+
# Hash([1, 2, 3]) #=> TypeError
|
603
|
+
#
|
124
604
|
def self?.Hash: [K, V] (Object x) -> ::Hash[K, V]
|
125
605
|
|
606
|
+
# <!--
|
607
|
+
# rdoc-file=object.c
|
608
|
+
# - Integer(arg, base=0, exception: true) -> integer or nil
|
609
|
+
# -->
|
610
|
+
# Converts *arg* to an Integer. Numeric types are converted directly (with
|
611
|
+
# floating point numbers being truncated). *base* (0, or between 2 and 36) is a
|
612
|
+
# base for integer string representation. If *arg* is a String, when *base* is
|
613
|
+
# omitted or equals zero, radix indicators (`0`, `0b`, and `0x`) are honored. In
|
614
|
+
# any case, strings should consist only of one or more digits, except for that a
|
615
|
+
# sign, one underscore between two digits, and leading/trailing spaces are
|
616
|
+
# optional. This behavior is different from that of String#to_i. Non string
|
617
|
+
# values will be converted by first trying `to_int`, then `to_i`.
|
618
|
+
#
|
619
|
+
# Passing `nil` raises a TypeError, while passing a String that does not conform
|
620
|
+
# with numeric representation raises an ArgumentError. This behavior can be
|
621
|
+
# altered by passing `exception: false`, in this case a not convertible value
|
622
|
+
# will return `nil`.
|
623
|
+
#
|
624
|
+
# Integer(123.999) #=> 123
|
625
|
+
# Integer("0x1a") #=> 26
|
626
|
+
# Integer(Time.new) #=> 1204973019
|
627
|
+
# Integer("0930", 10) #=> 930
|
628
|
+
# Integer("111", 2) #=> 7
|
629
|
+
# Integer(" +1_0 ") #=> 10
|
630
|
+
# Integer(nil) #=> TypeError: can't convert nil into Integer
|
631
|
+
# Integer("x") #=> ArgumentError: invalid value for Integer(): "x"
|
632
|
+
#
|
633
|
+
# Integer("x", exception: false) #=> nil
|
634
|
+
#
|
126
635
|
def self?.Integer: (Numeric | String arg, ?exception: bool exception) -> Integer
|
127
|
-
|
636
|
+
| (String arg, ?Integer base, ?exception: bool exception) -> Integer
|
128
637
|
|
638
|
+
# <!--
|
639
|
+
# rdoc-file=rational.c
|
640
|
+
# - Rational(x, y, exception: true) -> rational or nil
|
641
|
+
# - Rational(arg, exception: true) -> rational or nil
|
642
|
+
# -->
|
643
|
+
# Returns `x/y` or `arg` as a Rational.
|
644
|
+
#
|
645
|
+
# Rational(2, 3) #=> (2/3)
|
646
|
+
# Rational(5) #=> (5/1)
|
647
|
+
# Rational(0.5) #=> (1/2)
|
648
|
+
# Rational(0.3) #=> (5404319552844595/18014398509481984)
|
649
|
+
#
|
650
|
+
# Rational("2/3") #=> (2/3)
|
651
|
+
# Rational("0.3") #=> (3/10)
|
652
|
+
#
|
653
|
+
# Rational("10 cents") #=> ArgumentError
|
654
|
+
# Rational(nil) #=> TypeError
|
655
|
+
# Rational(1, nil) #=> TypeError
|
656
|
+
#
|
657
|
+
# Rational("10 cents", exception: false) #=> nil
|
658
|
+
#
|
659
|
+
# Syntax of the string form:
|
660
|
+
#
|
661
|
+
# string form = extra spaces , rational , extra spaces ;
|
662
|
+
# rational = [ sign ] , unsigned rational ;
|
663
|
+
# unsigned rational = numerator | numerator , "/" , denominator ;
|
664
|
+
# numerator = integer part | fractional part | integer part , fractional part ;
|
665
|
+
# denominator = digits ;
|
666
|
+
# integer part = digits ;
|
667
|
+
# fractional part = "." , digits , [ ( "e" | "E" ) , [ sign ] , digits ] ;
|
668
|
+
# sign = "-" | "+" ;
|
669
|
+
# digits = digit , { digit | "_" , digit } ;
|
670
|
+
# digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
|
671
|
+
# extra spaces = ? \s* ? ;
|
672
|
+
#
|
673
|
+
# See also String#to_r.
|
674
|
+
#
|
129
675
|
def self?.Rational: (Numeric | String | Object x, ?Numeric | String y, ?exception: bool exception) -> Rational
|
130
676
|
|
677
|
+
# <!--
|
678
|
+
# rdoc-file=object.c
|
679
|
+
# - String(arg) -> string
|
680
|
+
# -->
|
131
681
|
# Returns *arg* as a String.
|
132
682
|
#
|
133
683
|
# First tries to call its `to_str` method, then its `to_s` method.
|
@@ -138,61 +688,139 @@ module Kernel : BasicObject
|
|
138
688
|
#
|
139
689
|
def self?.String: (_ToStr | _ToS x) -> String
|
140
690
|
|
141
|
-
#
|
142
|
-
#
|
143
|
-
#
|
691
|
+
# <!--
|
692
|
+
# rdoc-file=eval.c
|
693
|
+
# - __callee__ -> symbol
|
694
|
+
# -->
|
695
|
+
# Returns the called name of the current method as a Symbol. If called outside
|
696
|
+
# of a method, it returns `nil`.
|
697
|
+
#
|
144
698
|
def self?.__callee__: () -> Symbol?
|
145
699
|
|
146
|
-
#
|
147
|
-
#
|
148
|
-
#
|
149
|
-
#
|
700
|
+
# <!--
|
701
|
+
# rdoc-file=eval.c
|
702
|
+
# - __dir__ -> string
|
703
|
+
# -->
|
704
|
+
# Returns the canonicalized absolute path of the directory of the file from
|
705
|
+
# which this method is called. It means symlinks in the path is resolved. If
|
706
|
+
# `__FILE__` is `nil`, it returns `nil`. The return value equals to
|
707
|
+
# `File.dirname(File.realpath(__FILE__))`.
|
708
|
+
#
|
150
709
|
def self?.__dir__: () -> String?
|
151
710
|
|
152
|
-
#
|
153
|
-
#
|
154
|
-
#
|
711
|
+
# <!--
|
712
|
+
# rdoc-file=eval.c
|
713
|
+
# - __method__ -> symbol
|
714
|
+
# -->
|
715
|
+
# Returns the name at the definition of the current method as a Symbol. If
|
716
|
+
# called outside of a method, it returns `nil`.
|
717
|
+
#
|
155
718
|
def self?.__method__: () -> Symbol?
|
156
719
|
|
720
|
+
# <!--
|
721
|
+
# rdoc-file=io.c
|
722
|
+
# - `cmd` -> string
|
723
|
+
# -->
|
724
|
+
# Returns the standard output of running *cmd* in a subshell. The built-in
|
725
|
+
# syntax `%x{...}` uses this method. Sets `$?` to the process status.
|
726
|
+
#
|
727
|
+
# `date` #=> "Wed Apr 9 08:56:30 CDT 2003\n"
|
728
|
+
# `ls testdir`.split[1] #=> "main.rb"
|
729
|
+
# `echo oops && exit 99` #=> "oops\n"
|
730
|
+
# $?.exitstatus #=> 99
|
731
|
+
#
|
157
732
|
def self?.`: (String arg0) -> String
|
158
733
|
|
734
|
+
# <!--
|
735
|
+
# rdoc-file=process.c
|
736
|
+
# - abort
|
737
|
+
# - Kernel::abort([msg])
|
738
|
+
# - Process.abort([msg])
|
739
|
+
# -->
|
740
|
+
# Terminate execution immediately, effectively by calling `Kernel.exit(false)`.
|
741
|
+
# If *msg* is given, it is written to STDERR prior to terminating.
|
742
|
+
#
|
159
743
|
def self?.abort: (?String msg) -> bot
|
160
744
|
|
745
|
+
# <!--
|
746
|
+
# rdoc-file=eval_jump.c
|
747
|
+
# - at_exit { block } -> proc
|
748
|
+
# -->
|
749
|
+
# Converts *block* to a `Proc` object (and therefore binds it at the point of
|
750
|
+
# call) and registers it for execution when the program exits. If multiple
|
751
|
+
# handlers are registered, they are executed in reverse order of registration.
|
752
|
+
#
|
753
|
+
# def do_at_exit(str1)
|
754
|
+
# at_exit { print str1 }
|
755
|
+
# end
|
756
|
+
# at_exit { puts "cruel world" }
|
757
|
+
# do_at_exit("goodbye ")
|
758
|
+
# exit
|
759
|
+
#
|
760
|
+
# *produces:*
|
761
|
+
#
|
762
|
+
# goodbye cruel world
|
763
|
+
#
|
161
764
|
def self?.at_exit: () { () -> untyped } -> Proc
|
162
765
|
|
766
|
+
# <!--
|
767
|
+
# rdoc-file=load.c
|
768
|
+
# - autoload(module, filename) -> nil
|
769
|
+
# -->
|
770
|
+
# Registers *filename* to be loaded (using Kernel::require) the first time that
|
771
|
+
# *module* (which may be a String or a symbol) is accessed.
|
772
|
+
#
|
773
|
+
# autoload(:MyModule, "/usr/local/lib/modules/my_module.rb")
|
774
|
+
#
|
163
775
|
def self?.autoload: (String | Symbol _module, String filename) -> NilClass
|
164
776
|
|
777
|
+
# <!--
|
778
|
+
# rdoc-file=load.c
|
779
|
+
# - autoload?(name, inherit=true) -> String or nil
|
780
|
+
# -->
|
781
|
+
# Returns *filename* to be loaded if *name* is registered as `autoload`.
|
782
|
+
#
|
783
|
+
# autoload(:B, "b")
|
784
|
+
# autoload?(:B) #=> "b"
|
785
|
+
#
|
165
786
|
def self?.autoload?: (Symbol | String name) -> String?
|
166
787
|
|
167
|
-
#
|
168
|
-
#
|
169
|
-
#
|
170
|
-
#
|
171
|
-
#
|
172
|
-
#
|
173
|
-
#
|
174
|
-
#
|
175
|
-
#
|
176
|
-
#
|
177
|
-
#
|
178
|
-
#
|
788
|
+
# <!--
|
789
|
+
# rdoc-file=proc.c
|
790
|
+
# - binding -> a_binding
|
791
|
+
# -->
|
792
|
+
# Returns a `Binding` object, describing the variable and method bindings at the
|
793
|
+
# point of call. This object can be used when calling `eval` to execute the
|
794
|
+
# evaluated command in this environment. See also the description of class
|
795
|
+
# `Binding`.
|
796
|
+
#
|
797
|
+
# def get_binding(param)
|
798
|
+
# binding
|
799
|
+
# end
|
800
|
+
# b = get_binding("hello")
|
801
|
+
# eval("param", b) #=> "hello"
|
802
|
+
#
|
179
803
|
def self?.binding: () -> Binding
|
180
804
|
|
181
|
-
#
|
182
|
-
#
|
183
|
-
#
|
184
|
-
#
|
185
|
-
#
|
186
|
-
#
|
187
|
-
#
|
188
|
-
#
|
189
|
-
#
|
190
|
-
#
|
191
|
-
#
|
192
|
-
#
|
193
|
-
#
|
194
|
-
#
|
195
|
-
#
|
805
|
+
# <!--
|
806
|
+
# rdoc-file=process.c
|
807
|
+
# - exit(status=true)
|
808
|
+
# - Kernel::exit(status=true)
|
809
|
+
# - Process::exit(status=true)
|
810
|
+
# -->
|
811
|
+
# Initiates the termination of the Ruby script by raising the SystemExit
|
812
|
+
# exception. This exception may be caught. The optional parameter is used to
|
813
|
+
# return a status code to the invoking environment. `true` and `FALSE` of
|
814
|
+
# *status* means success and failure respectively. The interpretation of other
|
815
|
+
# integer values are system dependent.
|
816
|
+
#
|
817
|
+
# begin
|
818
|
+
# exit
|
819
|
+
# puts "never get here"
|
820
|
+
# rescue SystemExit
|
821
|
+
# puts "rescued a SystemExit exception"
|
822
|
+
# end
|
823
|
+
# puts "after begin block"
|
196
824
|
#
|
197
825
|
# *produces:*
|
198
826
|
#
|
@@ -200,318 +828,1689 @@ module Kernel : BasicObject
|
|
200
828
|
# after begin block
|
201
829
|
#
|
202
830
|
# Just prior to termination, Ruby executes any `at_exit` functions (see
|
203
|
-
# Kernel::
|
204
|
-
#
|
205
|
-
# ).
|
831
|
+
# Kernel::at_exit) and runs any object finalizers (see
|
832
|
+
# ObjectSpace::define_finalizer).
|
206
833
|
#
|
207
|
-
#
|
208
|
-
#
|
209
|
-
#
|
210
|
-
# exit
|
211
|
-
# ```
|
834
|
+
# at_exit { puts "at_exit function" }
|
835
|
+
# ObjectSpace.define_finalizer("string", proc { puts "in finalizer" })
|
836
|
+
# exit
|
212
837
|
#
|
213
838
|
# *produces:*
|
214
839
|
#
|
215
840
|
# at_exit function
|
216
841
|
# in finalizer
|
842
|
+
#
|
217
843
|
def self?.exit: () -> bot
|
218
|
-
|
844
|
+
| (?Integer | TrueClass | FalseClass status) -> bot
|
219
845
|
|
846
|
+
# <!--
|
847
|
+
# rdoc-file=process.c
|
848
|
+
# - Process.exit!(status=false)
|
849
|
+
# -->
|
850
|
+
# Exits the process immediately. No exit handlers are run. *status* is returned
|
851
|
+
# to the underlying system as the exit status.
|
852
|
+
#
|
853
|
+
# Process.exit!(true)
|
854
|
+
#
|
220
855
|
def self?.exit!: (Integer | TrueClass | FalseClass status) -> bot
|
221
856
|
|
222
|
-
#
|
223
|
-
#
|
224
|
-
#
|
225
|
-
#
|
226
|
-
# that returns an `Exception` object when
|
227
|
-
# The optional second parameter sets the message
|
228
|
-
#
|
857
|
+
# <!-- rdoc-file=eval.c -->
|
858
|
+
# With no arguments, raises the exception in `$!` or raises a RuntimeError if
|
859
|
+
# `$!` is `nil`. With a single `String` argument, raises a `RuntimeError` with
|
860
|
+
# the string as a message. Otherwise, the first parameter should be an
|
861
|
+
# `Exception` class (or another object that returns an `Exception` object when
|
862
|
+
# sent an `exception` message). The optional second parameter sets the message
|
863
|
+
# associated with the exception (accessible via Exception#message), and the
|
864
|
+
# third parameter is an array of callback information (accessible via
|
865
|
+
# Exception#backtrace). The `cause` of the generated exception (accessible via
|
866
|
+
# Exception#cause) is automatically set to the "current" exception (`$!`), if
|
867
|
+
# any. An alternative value, either an `Exception` object or `nil`, can be
|
868
|
+
# specified via the `:cause` argument.
|
869
|
+
#
|
229
870
|
# Exceptions are caught by the `rescue` clause of `begin...end` blocks.
|
230
871
|
#
|
231
|
-
#
|
232
|
-
#
|
233
|
-
# raise ArgumentError, "No parameters", caller
|
234
|
-
# ```
|
872
|
+
# raise "Failed to create socket"
|
873
|
+
# raise ArgumentError, "No parameters", caller
|
235
874
|
#
|
236
|
-
# The `cause` of the generated exception is automatically set to the
|
237
|
-
# “current” exception ( `$!` ) if any. An alternative value, either an
|
238
|
-
# `Exception` object or `nil`, can be specified via the `:cause`
|
239
|
-
# argument.
|
240
875
|
def self?.fail: () -> bot
|
241
|
-
|
242
|
-
|
876
|
+
| (String arg0) -> bot
|
877
|
+
| (_Exception arg0, ?untyped arg1, ?::Array[String] arg2) -> bot
|
878
|
+
|
879
|
+
# <!--
|
880
|
+
# rdoc-file=eval.c
|
881
|
+
# - raise
|
882
|
+
# - raise(string, cause: $!)
|
883
|
+
# - raise(exception [, string [, array]], cause: $!)
|
884
|
+
# - fail
|
885
|
+
# - fail(string, cause: $!)
|
886
|
+
# - fail(exception [, string [, array]], cause: $!)
|
887
|
+
# -->
|
888
|
+
# With no arguments, raises the exception in `$!` or raises a RuntimeError if
|
889
|
+
# `$!` is `nil`. With a single `String` argument, raises a `RuntimeError` with
|
890
|
+
# the string as a message. Otherwise, the first parameter should be an
|
891
|
+
# `Exception` class (or another object that returns an `Exception` object when
|
892
|
+
# sent an `exception` message). The optional second parameter sets the message
|
893
|
+
# associated with the exception (accessible via Exception#message), and the
|
894
|
+
# third parameter is an array of callback information (accessible via
|
895
|
+
# Exception#backtrace). The `cause` of the generated exception (accessible via
|
896
|
+
# Exception#cause) is automatically set to the "current" exception (`$!`), if
|
897
|
+
# any. An alternative value, either an `Exception` object or `nil`, can be
|
898
|
+
# specified via the `:cause` argument.
|
899
|
+
#
|
900
|
+
# Exceptions are caught by the `rescue` clause of `begin...end` blocks.
|
901
|
+
#
|
902
|
+
# raise "Failed to create socket"
|
903
|
+
# raise ArgumentError, "No parameters", caller
|
904
|
+
#
|
243
905
|
alias raise fail
|
906
|
+
|
244
907
|
alias self.raise self.fail
|
245
908
|
|
909
|
+
# <!-- rdoc-file=object.c -->
|
910
|
+
# Returns the string resulting from applying *format_string* to any additional
|
911
|
+
# arguments. Within the format string, any characters other than format
|
912
|
+
# sequences are copied to the result.
|
913
|
+
#
|
914
|
+
# The syntax of a format sequence is as follows.
|
915
|
+
#
|
916
|
+
# %[flags][width][.precision]type
|
917
|
+
#
|
918
|
+
# A format sequence consists of a percent sign, followed by optional flags,
|
919
|
+
# width, and precision indicators, then terminated with a field type character.
|
920
|
+
# The field type controls how the corresponding `sprintf` argument is to be
|
921
|
+
# interpreted, while the flags modify that interpretation.
|
922
|
+
#
|
923
|
+
# The field type characters are:
|
924
|
+
#
|
925
|
+
# Field | Integer Format
|
926
|
+
# ------+--------------------------------------------------------------
|
927
|
+
# b | Convert argument as a binary number.
|
928
|
+
# | Negative numbers will be displayed as a two's complement
|
929
|
+
# | prefixed with `..1'.
|
930
|
+
# B | Equivalent to `b', but uses an uppercase 0B for prefix
|
931
|
+
# | in the alternative format by #.
|
932
|
+
# d | Convert argument as a decimal number.
|
933
|
+
# i | Identical to `d'.
|
934
|
+
# o | Convert argument as an octal number.
|
935
|
+
# | Negative numbers will be displayed as a two's complement
|
936
|
+
# | prefixed with `..7'.
|
937
|
+
# u | Identical to `d'.
|
938
|
+
# x | Convert argument as a hexadecimal number.
|
939
|
+
# | Negative numbers will be displayed as a two's complement
|
940
|
+
# | prefixed with `..f' (representing an infinite string of
|
941
|
+
# | leading 'ff's).
|
942
|
+
# X | Equivalent to `x', but uses uppercase letters.
|
943
|
+
#
|
944
|
+
# Field | Float Format
|
945
|
+
# ------+--------------------------------------------------------------
|
946
|
+
# e | Convert floating point argument into exponential notation
|
947
|
+
# | with one digit before the decimal point as [-]d.dddddde[+-]dd.
|
948
|
+
# | The precision specifies the number of digits after the decimal
|
949
|
+
# | point (defaulting to six).
|
950
|
+
# E | Equivalent to `e', but uses an uppercase E to indicate
|
951
|
+
# | the exponent.
|
952
|
+
# f | Convert floating point argument as [-]ddd.dddddd,
|
953
|
+
# | where the precision specifies the number of digits after
|
954
|
+
# | the decimal point.
|
955
|
+
# g | Convert a floating point number using exponential form
|
956
|
+
# | if the exponent is less than -4 or greater than or
|
957
|
+
# | equal to the precision, or in dd.dddd form otherwise.
|
958
|
+
# | The precision specifies the number of significant digits.
|
959
|
+
# G | Equivalent to `g', but use an uppercase `E' in exponent form.
|
960
|
+
# a | Convert floating point argument as [-]0xh.hhhhp[+-]dd,
|
961
|
+
# | which is consisted from optional sign, "0x", fraction part
|
962
|
+
# | as hexadecimal, "p", and exponential part as decimal.
|
963
|
+
# A | Equivalent to `a', but use uppercase `X' and `P'.
|
964
|
+
#
|
965
|
+
# Field | Other Format
|
966
|
+
# ------+--------------------------------------------------------------
|
967
|
+
# c | Argument is the numeric code for a single character or
|
968
|
+
# | a single character string itself.
|
969
|
+
# p | The valuing of argument.inspect.
|
970
|
+
# s | Argument is a string to be substituted. If the format
|
971
|
+
# | sequence contains a precision, at most that many characters
|
972
|
+
# | will be copied.
|
973
|
+
# % | A percent sign itself will be displayed. No argument taken.
|
974
|
+
#
|
975
|
+
# The flags modifies the behavior of the formats. The flag characters are:
|
976
|
+
#
|
977
|
+
# Flag | Applies to | Meaning
|
978
|
+
# ---------+---------------+-----------------------------------------
|
979
|
+
# space | bBdiouxX | Leave a space at the start of
|
980
|
+
# | aAeEfgG | non-negative numbers.
|
981
|
+
# | (numeric fmt) | For `o', `x', `X', `b' and `B', use
|
982
|
+
# | | a minus sign with absolute value for
|
983
|
+
# | | negative values.
|
984
|
+
# ---------+---------------+-----------------------------------------
|
985
|
+
# (digit)$ | all | Specifies the absolute argument number
|
986
|
+
# | | for this field. Absolute and relative
|
987
|
+
# | | argument numbers cannot be mixed in a
|
988
|
+
# | | sprintf string.
|
989
|
+
# ---------+---------------+-----------------------------------------
|
990
|
+
# # | bBoxX | Use an alternative format.
|
991
|
+
# | aAeEfgG | For the conversions `o', increase the precision
|
992
|
+
# | | until the first digit will be `0' if
|
993
|
+
# | | it is not formatted as complements.
|
994
|
+
# | | For the conversions `x', `X', `b' and `B'
|
995
|
+
# | | on non-zero, prefix the result with ``0x'',
|
996
|
+
# | | ``0X'', ``0b'' and ``0B'', respectively.
|
997
|
+
# | | For `a', `A', `e', `E', `f', `g', and 'G',
|
998
|
+
# | | force a decimal point to be added,
|
999
|
+
# | | even if no digits follow.
|
1000
|
+
# | | For `g' and 'G', do not remove trailing zeros.
|
1001
|
+
# ---------+---------------+-----------------------------------------
|
1002
|
+
# + | bBdiouxX | Add a leading plus sign to non-negative
|
1003
|
+
# | aAeEfgG | numbers.
|
1004
|
+
# | (numeric fmt) | For `o', `x', `X', `b' and `B', use
|
1005
|
+
# | | a minus sign with absolute value for
|
1006
|
+
# | | negative values.
|
1007
|
+
# ---------+---------------+-----------------------------------------
|
1008
|
+
# - | all | Left-justify the result of this conversion.
|
1009
|
+
# ---------+---------------+-----------------------------------------
|
1010
|
+
# 0 (zero) | bBdiouxX | Pad with zeros, not spaces.
|
1011
|
+
# | aAeEfgG | For `o', `x', `X', `b' and `B', radix-1
|
1012
|
+
# | (numeric fmt) | is used for negative numbers formatted as
|
1013
|
+
# | | complements.
|
1014
|
+
# ---------+---------------+-----------------------------------------
|
1015
|
+
# * | all | Use the next argument as the field width.
|
1016
|
+
# | | If negative, left-justify the result. If the
|
1017
|
+
# | | asterisk is followed by a number and a dollar
|
1018
|
+
# | | sign, use the indicated argument as the width.
|
1019
|
+
#
|
1020
|
+
# Examples of flags:
|
1021
|
+
#
|
1022
|
+
# # `+' and space flag specifies the sign of non-negative numbers.
|
1023
|
+
# sprintf("%d", 123) #=> "123"
|
1024
|
+
# sprintf("%+d", 123) #=> "+123"
|
1025
|
+
# sprintf("% d", 123) #=> " 123"
|
1026
|
+
#
|
1027
|
+
# # `#' flag for `o' increases number of digits to show `0'.
|
1028
|
+
# # `+' and space flag changes format of negative numbers.
|
1029
|
+
# sprintf("%o", 123) #=> "173"
|
1030
|
+
# sprintf("%#o", 123) #=> "0173"
|
1031
|
+
# sprintf("%+o", -123) #=> "-173"
|
1032
|
+
# sprintf("%o", -123) #=> "..7605"
|
1033
|
+
# sprintf("%#o", -123) #=> "..7605"
|
1034
|
+
#
|
1035
|
+
# # `#' flag for `x' add a prefix `0x' for non-zero numbers.
|
1036
|
+
# # `+' and space flag disables complements for negative numbers.
|
1037
|
+
# sprintf("%x", 123) #=> "7b"
|
1038
|
+
# sprintf("%#x", 123) #=> "0x7b"
|
1039
|
+
# sprintf("%+x", -123) #=> "-7b"
|
1040
|
+
# sprintf("%x", -123) #=> "..f85"
|
1041
|
+
# sprintf("%#x", -123) #=> "0x..f85"
|
1042
|
+
# sprintf("%#x", 0) #=> "0"
|
1043
|
+
#
|
1044
|
+
# # `#' for `X' uses the prefix `0X'.
|
1045
|
+
# sprintf("%X", 123) #=> "7B"
|
1046
|
+
# sprintf("%#X", 123) #=> "0X7B"
|
1047
|
+
#
|
1048
|
+
# # `#' flag for `b' add a prefix `0b' for non-zero numbers.
|
1049
|
+
# # `+' and space flag disables complements for negative numbers.
|
1050
|
+
# sprintf("%b", 123) #=> "1111011"
|
1051
|
+
# sprintf("%#b", 123) #=> "0b1111011"
|
1052
|
+
# sprintf("%+b", -123) #=> "-1111011"
|
1053
|
+
# sprintf("%b", -123) #=> "..10000101"
|
1054
|
+
# sprintf("%#b", -123) #=> "0b..10000101"
|
1055
|
+
# sprintf("%#b", 0) #=> "0"
|
1056
|
+
#
|
1057
|
+
# # `#' for `B' uses the prefix `0B'.
|
1058
|
+
# sprintf("%B", 123) #=> "1111011"
|
1059
|
+
# sprintf("%#B", 123) #=> "0B1111011"
|
1060
|
+
#
|
1061
|
+
# # `#' for `e' forces to show the decimal point.
|
1062
|
+
# sprintf("%.0e", 1) #=> "1e+00"
|
1063
|
+
# sprintf("%#.0e", 1) #=> "1.e+00"
|
1064
|
+
#
|
1065
|
+
# # `#' for `f' forces to show the decimal point.
|
1066
|
+
# sprintf("%.0f", 1234) #=> "1234"
|
1067
|
+
# sprintf("%#.0f", 1234) #=> "1234."
|
1068
|
+
#
|
1069
|
+
# # `#' for `g' forces to show the decimal point.
|
1070
|
+
# # It also disables stripping lowest zeros.
|
1071
|
+
# sprintf("%g", 123.4) #=> "123.4"
|
1072
|
+
# sprintf("%#g", 123.4) #=> "123.400"
|
1073
|
+
# sprintf("%g", 123456) #=> "123456"
|
1074
|
+
# sprintf("%#g", 123456) #=> "123456."
|
1075
|
+
#
|
1076
|
+
# The field width is an optional integer, followed optionally by a period and a
|
1077
|
+
# precision. The width specifies the minimum number of characters that will be
|
1078
|
+
# written to the result for this field.
|
1079
|
+
#
|
1080
|
+
# Examples of width:
|
1081
|
+
#
|
1082
|
+
# # padding is done by spaces, width=20
|
1083
|
+
# # 0 or radix-1. <------------------>
|
1084
|
+
# sprintf("%20d", 123) #=> " 123"
|
1085
|
+
# sprintf("%+20d", 123) #=> " +123"
|
1086
|
+
# sprintf("%020d", 123) #=> "00000000000000000123"
|
1087
|
+
# sprintf("%+020d", 123) #=> "+0000000000000000123"
|
1088
|
+
# sprintf("% 020d", 123) #=> " 0000000000000000123"
|
1089
|
+
# sprintf("%-20d", 123) #=> "123 "
|
1090
|
+
# sprintf("%-+20d", 123) #=> "+123 "
|
1091
|
+
# sprintf("%- 20d", 123) #=> " 123 "
|
1092
|
+
# sprintf("%020x", -123) #=> "..ffffffffffffffff85"
|
1093
|
+
#
|
1094
|
+
# For numeric fields, the precision controls the number of decimal places
|
1095
|
+
# displayed. For string fields, the precision determines the maximum number of
|
1096
|
+
# characters to be copied from the string. (Thus, the format sequence `%10.10s`
|
1097
|
+
# will always contribute exactly ten characters to the result.)
|
1098
|
+
#
|
1099
|
+
# Examples of precisions:
|
1100
|
+
#
|
1101
|
+
# # precision for `d', 'o', 'x' and 'b' is
|
1102
|
+
# # minimum number of digits <------>
|
1103
|
+
# sprintf("%20.8d", 123) #=> " 00000123"
|
1104
|
+
# sprintf("%20.8o", 123) #=> " 00000173"
|
1105
|
+
# sprintf("%20.8x", 123) #=> " 0000007b"
|
1106
|
+
# sprintf("%20.8b", 123) #=> " 01111011"
|
1107
|
+
# sprintf("%20.8d", -123) #=> " -00000123"
|
1108
|
+
# sprintf("%20.8o", -123) #=> " ..777605"
|
1109
|
+
# sprintf("%20.8x", -123) #=> " ..ffff85"
|
1110
|
+
# sprintf("%20.8b", -11) #=> " ..110101"
|
1111
|
+
#
|
1112
|
+
# # "0x" and "0b" for `#x' and `#b' is not counted for
|
1113
|
+
# # precision but "0" for `#o' is counted. <------>
|
1114
|
+
# sprintf("%#20.8d", 123) #=> " 00000123"
|
1115
|
+
# sprintf("%#20.8o", 123) #=> " 00000173"
|
1116
|
+
# sprintf("%#20.8x", 123) #=> " 0x0000007b"
|
1117
|
+
# sprintf("%#20.8b", 123) #=> " 0b01111011"
|
1118
|
+
# sprintf("%#20.8d", -123) #=> " -00000123"
|
1119
|
+
# sprintf("%#20.8o", -123) #=> " ..777605"
|
1120
|
+
# sprintf("%#20.8x", -123) #=> " 0x..ffff85"
|
1121
|
+
# sprintf("%#20.8b", -11) #=> " 0b..110101"
|
1122
|
+
#
|
1123
|
+
# # precision for `e' is number of
|
1124
|
+
# # digits after the decimal point <------>
|
1125
|
+
# sprintf("%20.8e", 1234.56789) #=> " 1.23456789e+03"
|
1126
|
+
#
|
1127
|
+
# # precision for `f' is number of
|
1128
|
+
# # digits after the decimal point <------>
|
1129
|
+
# sprintf("%20.8f", 1234.56789) #=> " 1234.56789000"
|
1130
|
+
#
|
1131
|
+
# # precision for `g' is number of
|
1132
|
+
# # significant digits <------->
|
1133
|
+
# sprintf("%20.8g", 1234.56789) #=> " 1234.5679"
|
1134
|
+
#
|
1135
|
+
# # <------->
|
1136
|
+
# sprintf("%20.8g", 123456789) #=> " 1.2345679e+08"
|
1137
|
+
#
|
1138
|
+
# # precision for `s' is
|
1139
|
+
# # maximum number of characters <------>
|
1140
|
+
# sprintf("%20.8s", "string test") #=> " string t"
|
1141
|
+
#
|
1142
|
+
# Examples:
|
1143
|
+
#
|
1144
|
+
# sprintf("%d %04x", 123, 123) #=> "123 007b"
|
1145
|
+
# sprintf("%08b '%4s'", 123, 123) #=> "01111011 ' 123'"
|
1146
|
+
# sprintf("%1$*2$s %2$d %1$s", "hello", 8) #=> " hello 8 hello"
|
1147
|
+
# sprintf("%1$*2$s %2$d", "hello", -8) #=> "hello -8"
|
1148
|
+
# sprintf("%+g:% g:%-g", 1.23, 1.23, 1.23) #=> "+1.23: 1.23:1.23"
|
1149
|
+
# sprintf("%u", -123) #=> "-123"
|
1150
|
+
#
|
1151
|
+
# For more complex formatting, Ruby supports a reference by name. %<name>s style
|
1152
|
+
# uses format style, but %{name} style doesn't.
|
1153
|
+
#
|
1154
|
+
# Examples:
|
1155
|
+
# sprintf("%<foo>d : %<bar>f", { :foo => 1, :bar => 2 })
|
1156
|
+
# #=> 1 : 2.000000
|
1157
|
+
# sprintf("%{foo}f", { :foo => 1 })
|
1158
|
+
# # => "1f"
|
1159
|
+
#
|
246
1160
|
def self?.format: (String format, *untyped args) -> String
|
1161
|
+
|
1162
|
+
# <!--
|
1163
|
+
# rdoc-file=object.c
|
1164
|
+
# - format(format_string [, arguments...] ) -> string
|
1165
|
+
# - sprintf(format_string [, arguments...] ) -> string
|
1166
|
+
# -->
|
1167
|
+
# Returns the string resulting from applying *format_string* to any additional
|
1168
|
+
# arguments. Within the format string, any characters other than format
|
1169
|
+
# sequences are copied to the result.
|
1170
|
+
#
|
1171
|
+
# The syntax of a format sequence is as follows.
|
1172
|
+
#
|
1173
|
+
# %[flags][width][.precision]type
|
1174
|
+
#
|
1175
|
+
# A format sequence consists of a percent sign, followed by optional flags,
|
1176
|
+
# width, and precision indicators, then terminated with a field type character.
|
1177
|
+
# The field type controls how the corresponding `sprintf` argument is to be
|
1178
|
+
# interpreted, while the flags modify that interpretation.
|
1179
|
+
#
|
1180
|
+
# The field type characters are:
|
1181
|
+
#
|
1182
|
+
# Field | Integer Format
|
1183
|
+
# ------+--------------------------------------------------------------
|
1184
|
+
# b | Convert argument as a binary number.
|
1185
|
+
# | Negative numbers will be displayed as a two's complement
|
1186
|
+
# | prefixed with `..1'.
|
1187
|
+
# B | Equivalent to `b', but uses an uppercase 0B for prefix
|
1188
|
+
# | in the alternative format by #.
|
1189
|
+
# d | Convert argument as a decimal number.
|
1190
|
+
# i | Identical to `d'.
|
1191
|
+
# o | Convert argument as an octal number.
|
1192
|
+
# | Negative numbers will be displayed as a two's complement
|
1193
|
+
# | prefixed with `..7'.
|
1194
|
+
# u | Identical to `d'.
|
1195
|
+
# x | Convert argument as a hexadecimal number.
|
1196
|
+
# | Negative numbers will be displayed as a two's complement
|
1197
|
+
# | prefixed with `..f' (representing an infinite string of
|
1198
|
+
# | leading 'ff's).
|
1199
|
+
# X | Equivalent to `x', but uses uppercase letters.
|
1200
|
+
#
|
1201
|
+
# Field | Float Format
|
1202
|
+
# ------+--------------------------------------------------------------
|
1203
|
+
# e | Convert floating point argument into exponential notation
|
1204
|
+
# | with one digit before the decimal point as [-]d.dddddde[+-]dd.
|
1205
|
+
# | The precision specifies the number of digits after the decimal
|
1206
|
+
# | point (defaulting to six).
|
1207
|
+
# E | Equivalent to `e', but uses an uppercase E to indicate
|
1208
|
+
# | the exponent.
|
1209
|
+
# f | Convert floating point argument as [-]ddd.dddddd,
|
1210
|
+
# | where the precision specifies the number of digits after
|
1211
|
+
# | the decimal point.
|
1212
|
+
# g | Convert a floating point number using exponential form
|
1213
|
+
# | if the exponent is less than -4 or greater than or
|
1214
|
+
# | equal to the precision, or in dd.dddd form otherwise.
|
1215
|
+
# | The precision specifies the number of significant digits.
|
1216
|
+
# G | Equivalent to `g', but use an uppercase `E' in exponent form.
|
1217
|
+
# a | Convert floating point argument as [-]0xh.hhhhp[+-]dd,
|
1218
|
+
# | which is consisted from optional sign, "0x", fraction part
|
1219
|
+
# | as hexadecimal, "p", and exponential part as decimal.
|
1220
|
+
# A | Equivalent to `a', but use uppercase `X' and `P'.
|
1221
|
+
#
|
1222
|
+
# Field | Other Format
|
1223
|
+
# ------+--------------------------------------------------------------
|
1224
|
+
# c | Argument is the numeric code for a single character or
|
1225
|
+
# | a single character string itself.
|
1226
|
+
# p | The valuing of argument.inspect.
|
1227
|
+
# s | Argument is a string to be substituted. If the format
|
1228
|
+
# | sequence contains a precision, at most that many characters
|
1229
|
+
# | will be copied.
|
1230
|
+
# % | A percent sign itself will be displayed. No argument taken.
|
1231
|
+
#
|
1232
|
+
# The flags modifies the behavior of the formats. The flag characters are:
|
1233
|
+
#
|
1234
|
+
# Flag | Applies to | Meaning
|
1235
|
+
# ---------+---------------+-----------------------------------------
|
1236
|
+
# space | bBdiouxX | Leave a space at the start of
|
1237
|
+
# | aAeEfgG | non-negative numbers.
|
1238
|
+
# | (numeric fmt) | For `o', `x', `X', `b' and `B', use
|
1239
|
+
# | | a minus sign with absolute value for
|
1240
|
+
# | | negative values.
|
1241
|
+
# ---------+---------------+-----------------------------------------
|
1242
|
+
# (digit)$ | all | Specifies the absolute argument number
|
1243
|
+
# | | for this field. Absolute and relative
|
1244
|
+
# | | argument numbers cannot be mixed in a
|
1245
|
+
# | | sprintf string.
|
1246
|
+
# ---------+---------------+-----------------------------------------
|
1247
|
+
# # | bBoxX | Use an alternative format.
|
1248
|
+
# | aAeEfgG | For the conversions `o', increase the precision
|
1249
|
+
# | | until the first digit will be `0' if
|
1250
|
+
# | | it is not formatted as complements.
|
1251
|
+
# | | For the conversions `x', `X', `b' and `B'
|
1252
|
+
# | | on non-zero, prefix the result with ``0x'',
|
1253
|
+
# | | ``0X'', ``0b'' and ``0B'', respectively.
|
1254
|
+
# | | For `a', `A', `e', `E', `f', `g', and 'G',
|
1255
|
+
# | | force a decimal point to be added,
|
1256
|
+
# | | even if no digits follow.
|
1257
|
+
# | | For `g' and 'G', do not remove trailing zeros.
|
1258
|
+
# ---------+---------------+-----------------------------------------
|
1259
|
+
# + | bBdiouxX | Add a leading plus sign to non-negative
|
1260
|
+
# | aAeEfgG | numbers.
|
1261
|
+
# | (numeric fmt) | For `o', `x', `X', `b' and `B', use
|
1262
|
+
# | | a minus sign with absolute value for
|
1263
|
+
# | | negative values.
|
1264
|
+
# ---------+---------------+-----------------------------------------
|
1265
|
+
# - | all | Left-justify the result of this conversion.
|
1266
|
+
# ---------+---------------+-----------------------------------------
|
1267
|
+
# 0 (zero) | bBdiouxX | Pad with zeros, not spaces.
|
1268
|
+
# | aAeEfgG | For `o', `x', `X', `b' and `B', radix-1
|
1269
|
+
# | (numeric fmt) | is used for negative numbers formatted as
|
1270
|
+
# | | complements.
|
1271
|
+
# ---------+---------------+-----------------------------------------
|
1272
|
+
# * | all | Use the next argument as the field width.
|
1273
|
+
# | | If negative, left-justify the result. If the
|
1274
|
+
# | | asterisk is followed by a number and a dollar
|
1275
|
+
# | | sign, use the indicated argument as the width.
|
1276
|
+
#
|
1277
|
+
# Examples of flags:
|
1278
|
+
#
|
1279
|
+
# # `+' and space flag specifies the sign of non-negative numbers.
|
1280
|
+
# sprintf("%d", 123) #=> "123"
|
1281
|
+
# sprintf("%+d", 123) #=> "+123"
|
1282
|
+
# sprintf("% d", 123) #=> " 123"
|
1283
|
+
#
|
1284
|
+
# # `#' flag for `o' increases number of digits to show `0'.
|
1285
|
+
# # `+' and space flag changes format of negative numbers.
|
1286
|
+
# sprintf("%o", 123) #=> "173"
|
1287
|
+
# sprintf("%#o", 123) #=> "0173"
|
1288
|
+
# sprintf("%+o", -123) #=> "-173"
|
1289
|
+
# sprintf("%o", -123) #=> "..7605"
|
1290
|
+
# sprintf("%#o", -123) #=> "..7605"
|
1291
|
+
#
|
1292
|
+
# # `#' flag for `x' add a prefix `0x' for non-zero numbers.
|
1293
|
+
# # `+' and space flag disables complements for negative numbers.
|
1294
|
+
# sprintf("%x", 123) #=> "7b"
|
1295
|
+
# sprintf("%#x", 123) #=> "0x7b"
|
1296
|
+
# sprintf("%+x", -123) #=> "-7b"
|
1297
|
+
# sprintf("%x", -123) #=> "..f85"
|
1298
|
+
# sprintf("%#x", -123) #=> "0x..f85"
|
1299
|
+
# sprintf("%#x", 0) #=> "0"
|
1300
|
+
#
|
1301
|
+
# # `#' for `X' uses the prefix `0X'.
|
1302
|
+
# sprintf("%X", 123) #=> "7B"
|
1303
|
+
# sprintf("%#X", 123) #=> "0X7B"
|
1304
|
+
#
|
1305
|
+
# # `#' flag for `b' add a prefix `0b' for non-zero numbers.
|
1306
|
+
# # `+' and space flag disables complements for negative numbers.
|
1307
|
+
# sprintf("%b", 123) #=> "1111011"
|
1308
|
+
# sprintf("%#b", 123) #=> "0b1111011"
|
1309
|
+
# sprintf("%+b", -123) #=> "-1111011"
|
1310
|
+
# sprintf("%b", -123) #=> "..10000101"
|
1311
|
+
# sprintf("%#b", -123) #=> "0b..10000101"
|
1312
|
+
# sprintf("%#b", 0) #=> "0"
|
1313
|
+
#
|
1314
|
+
# # `#' for `B' uses the prefix `0B'.
|
1315
|
+
# sprintf("%B", 123) #=> "1111011"
|
1316
|
+
# sprintf("%#B", 123) #=> "0B1111011"
|
1317
|
+
#
|
1318
|
+
# # `#' for `e' forces to show the decimal point.
|
1319
|
+
# sprintf("%.0e", 1) #=> "1e+00"
|
1320
|
+
# sprintf("%#.0e", 1) #=> "1.e+00"
|
1321
|
+
#
|
1322
|
+
# # `#' for `f' forces to show the decimal point.
|
1323
|
+
# sprintf("%.0f", 1234) #=> "1234"
|
1324
|
+
# sprintf("%#.0f", 1234) #=> "1234."
|
1325
|
+
#
|
1326
|
+
# # `#' for `g' forces to show the decimal point.
|
1327
|
+
# # It also disables stripping lowest zeros.
|
1328
|
+
# sprintf("%g", 123.4) #=> "123.4"
|
1329
|
+
# sprintf("%#g", 123.4) #=> "123.400"
|
1330
|
+
# sprintf("%g", 123456) #=> "123456"
|
1331
|
+
# sprintf("%#g", 123456) #=> "123456."
|
1332
|
+
#
|
1333
|
+
# The field width is an optional integer, followed optionally by a period and a
|
1334
|
+
# precision. The width specifies the minimum number of characters that will be
|
1335
|
+
# written to the result for this field.
|
1336
|
+
#
|
1337
|
+
# Examples of width:
|
1338
|
+
#
|
1339
|
+
# # padding is done by spaces, width=20
|
1340
|
+
# # 0 or radix-1. <------------------>
|
1341
|
+
# sprintf("%20d", 123) #=> " 123"
|
1342
|
+
# sprintf("%+20d", 123) #=> " +123"
|
1343
|
+
# sprintf("%020d", 123) #=> "00000000000000000123"
|
1344
|
+
# sprintf("%+020d", 123) #=> "+0000000000000000123"
|
1345
|
+
# sprintf("% 020d", 123) #=> " 0000000000000000123"
|
1346
|
+
# sprintf("%-20d", 123) #=> "123 "
|
1347
|
+
# sprintf("%-+20d", 123) #=> "+123 "
|
1348
|
+
# sprintf("%- 20d", 123) #=> " 123 "
|
1349
|
+
# sprintf("%020x", -123) #=> "..ffffffffffffffff85"
|
1350
|
+
#
|
1351
|
+
# For numeric fields, the precision controls the number of decimal places
|
1352
|
+
# displayed. For string fields, the precision determines the maximum number of
|
1353
|
+
# characters to be copied from the string. (Thus, the format sequence `%10.10s`
|
1354
|
+
# will always contribute exactly ten characters to the result.)
|
1355
|
+
#
|
1356
|
+
# Examples of precisions:
|
1357
|
+
#
|
1358
|
+
# # precision for `d', 'o', 'x' and 'b' is
|
1359
|
+
# # minimum number of digits <------>
|
1360
|
+
# sprintf("%20.8d", 123) #=> " 00000123"
|
1361
|
+
# sprintf("%20.8o", 123) #=> " 00000173"
|
1362
|
+
# sprintf("%20.8x", 123) #=> " 0000007b"
|
1363
|
+
# sprintf("%20.8b", 123) #=> " 01111011"
|
1364
|
+
# sprintf("%20.8d", -123) #=> " -00000123"
|
1365
|
+
# sprintf("%20.8o", -123) #=> " ..777605"
|
1366
|
+
# sprintf("%20.8x", -123) #=> " ..ffff85"
|
1367
|
+
# sprintf("%20.8b", -11) #=> " ..110101"
|
1368
|
+
#
|
1369
|
+
# # "0x" and "0b" for `#x' and `#b' is not counted for
|
1370
|
+
# # precision but "0" for `#o' is counted. <------>
|
1371
|
+
# sprintf("%#20.8d", 123) #=> " 00000123"
|
1372
|
+
# sprintf("%#20.8o", 123) #=> " 00000173"
|
1373
|
+
# sprintf("%#20.8x", 123) #=> " 0x0000007b"
|
1374
|
+
# sprintf("%#20.8b", 123) #=> " 0b01111011"
|
1375
|
+
# sprintf("%#20.8d", -123) #=> " -00000123"
|
1376
|
+
# sprintf("%#20.8o", -123) #=> " ..777605"
|
1377
|
+
# sprintf("%#20.8x", -123) #=> " 0x..ffff85"
|
1378
|
+
# sprintf("%#20.8b", -11) #=> " 0b..110101"
|
1379
|
+
#
|
1380
|
+
# # precision for `e' is number of
|
1381
|
+
# # digits after the decimal point <------>
|
1382
|
+
# sprintf("%20.8e", 1234.56789) #=> " 1.23456789e+03"
|
1383
|
+
#
|
1384
|
+
# # precision for `f' is number of
|
1385
|
+
# # digits after the decimal point <------>
|
1386
|
+
# sprintf("%20.8f", 1234.56789) #=> " 1234.56789000"
|
1387
|
+
#
|
1388
|
+
# # precision for `g' is number of
|
1389
|
+
# # significant digits <------->
|
1390
|
+
# sprintf("%20.8g", 1234.56789) #=> " 1234.5679"
|
1391
|
+
#
|
1392
|
+
# # <------->
|
1393
|
+
# sprintf("%20.8g", 123456789) #=> " 1.2345679e+08"
|
1394
|
+
#
|
1395
|
+
# # precision for `s' is
|
1396
|
+
# # maximum number of characters <------>
|
1397
|
+
# sprintf("%20.8s", "string test") #=> " string t"
|
1398
|
+
#
|
1399
|
+
# Examples:
|
1400
|
+
#
|
1401
|
+
# sprintf("%d %04x", 123, 123) #=> "123 007b"
|
1402
|
+
# sprintf("%08b '%4s'", 123, 123) #=> "01111011 ' 123'"
|
1403
|
+
# sprintf("%1$*2$s %2$d %1$s", "hello", 8) #=> " hello 8 hello"
|
1404
|
+
# sprintf("%1$*2$s %2$d", "hello", -8) #=> "hello -8"
|
1405
|
+
# sprintf("%+g:% g:%-g", 1.23, 1.23, 1.23) #=> "+1.23: 1.23:1.23"
|
1406
|
+
# sprintf("%u", -123) #=> "-123"
|
1407
|
+
#
|
1408
|
+
# For more complex formatting, Ruby supports a reference by name. %<name>s style
|
1409
|
+
# uses format style, but %{name} style doesn't.
|
1410
|
+
#
|
1411
|
+
# Examples:
|
1412
|
+
# sprintf("%<foo>d : %<bar>f", { :foo => 1, :bar => 2 })
|
1413
|
+
# #=> 1 : 2.000000
|
1414
|
+
# sprintf("%{foo}f", { :foo => 1 })
|
1415
|
+
# # => "1f"
|
1416
|
+
#
|
247
1417
|
alias sprintf format
|
1418
|
+
|
248
1419
|
alias self.sprintf self.format
|
249
1420
|
|
1421
|
+
# <!--
|
1422
|
+
# rdoc-file=io.c
|
1423
|
+
# - gets(sep=$/ [, getline_args]) -> string or nil
|
1424
|
+
# - gets(limit [, getline_args]) -> string or nil
|
1425
|
+
# - gets(sep, limit [, getline_args]) -> string or nil
|
1426
|
+
# -->
|
1427
|
+
# Returns (and assigns to `$_`) the next line from the list of files in `ARGV`
|
1428
|
+
# (or `$*`), or from standard input if no files are present on the command line.
|
1429
|
+
# Returns `nil` at end of file. The optional argument specifies the record
|
1430
|
+
# separator. The separator is included with the contents of each record. A
|
1431
|
+
# separator of `nil` reads the entire contents, and a zero-length separator
|
1432
|
+
# reads the input one paragraph at a time, where paragraphs are divided by two
|
1433
|
+
# consecutive newlines. If the first argument is an integer, or optional second
|
1434
|
+
# argument is given, the returning string would not be longer than the given
|
1435
|
+
# value in bytes. If multiple filenames are present in `ARGV`, `gets(nil)` will
|
1436
|
+
# read the contents one file at a time.
|
1437
|
+
#
|
1438
|
+
# ARGV << "testfile"
|
1439
|
+
# print while gets
|
1440
|
+
#
|
1441
|
+
# *produces:*
|
1442
|
+
#
|
1443
|
+
# This is line one
|
1444
|
+
# This is line two
|
1445
|
+
# This is line three
|
1446
|
+
# And so on...
|
1447
|
+
#
|
1448
|
+
# The style of programming using `$_` as an implicit parameter is gradually
|
1449
|
+
# losing favor in the Ruby community.
|
1450
|
+
#
|
250
1451
|
def self?.gets: (?String arg0, ?Integer arg1) -> String?
|
251
1452
|
|
252
|
-
#
|
1453
|
+
# <!--
|
1454
|
+
# rdoc-file=eval.c
|
1455
|
+
# - global_variables -> array
|
1456
|
+
# -->
|
1457
|
+
# Returns an array of the names of global variables. This includes special
|
1458
|
+
# regexp global variables such as `$~` and `$+`, but does not include the
|
1459
|
+
# numbered regexp global variables (`$1`, `$2`, etc.).
|
1460
|
+
#
|
1461
|
+
# global_variables.grep /std/ #=> [:$stdin, :$stdout, :$stderr]
|
253
1462
|
#
|
254
|
-
# ```ruby
|
255
|
-
# global_variables.grep /std/ #=> [:$stdin, :$stdout, :$stderr]
|
256
|
-
# ```
|
257
1463
|
def self?.global_variables: () -> ::Array[Symbol]
|
258
1464
|
|
259
|
-
|
1465
|
+
# <!--
|
1466
|
+
# rdoc-file=load.c
|
1467
|
+
# - load(filename, wrap=false) -> true
|
1468
|
+
# -->
|
1469
|
+
# Loads and executes the Ruby program in the file *filename*.
|
1470
|
+
#
|
1471
|
+
# If the filename is an absolute path (e.g. starts with '/'), the file will be
|
1472
|
+
# loaded directly using the absolute path.
|
1473
|
+
#
|
1474
|
+
# If the filename is an explicit relative path (e.g. starts with './' or '../'),
|
1475
|
+
# the file will be loaded using the relative path from the current directory.
|
1476
|
+
#
|
1477
|
+
# Otherwise, the file will be searched for in the library directories listed in
|
1478
|
+
# `$LOAD_PATH` (`$:`). If the file is found in a directory, it will attempt to
|
1479
|
+
# load the file relative to that directory. If the file is not found in any of
|
1480
|
+
# the directories in `$LOAD_PATH`, the file will be loaded using the relative
|
1481
|
+
# path from the current directory.
|
1482
|
+
#
|
1483
|
+
# If the file doesn't exist when there is an attempt to load it, a LoadError
|
1484
|
+
# will be raised.
|
1485
|
+
#
|
1486
|
+
# If the optional *wrap* parameter is `true`, the loaded script will be executed
|
1487
|
+
# under an anonymous module, protecting the calling program's global namespace.
|
1488
|
+
# If the optional *wrap* parameter is a module, the loaded script will be
|
1489
|
+
# executed under the given module. In no circumstance will any local variables
|
1490
|
+
# in the loaded file be propagated to the loading environment.
|
1491
|
+
#
|
1492
|
+
def self?.load: (String filename, ?Module | bool) -> bool
|
260
1493
|
|
1494
|
+
# <!--
|
1495
|
+
# rdoc-file=vm_eval.c
|
1496
|
+
# - loop { block }
|
1497
|
+
# - loop -> an_enumerator
|
1498
|
+
# -->
|
261
1499
|
# Repeatedly executes the block.
|
262
1500
|
#
|
263
1501
|
# If no block is given, an enumerator is returned instead.
|
264
1502
|
#
|
265
|
-
#
|
266
|
-
#
|
267
|
-
#
|
268
|
-
#
|
269
|
-
#
|
270
|
-
#
|
271
|
-
#
|
272
|
-
#
|
273
|
-
#
|
274
|
-
#
|
275
|
-
#
|
276
|
-
# "
|
277
|
-
#
|
278
|
-
#
|
279
|
-
#
|
280
|
-
#
|
281
|
-
#
|
282
|
-
#
|
283
|
-
#
|
284
|
-
#
|
285
|
-
# result = loop {
|
286
|
-
# puts enum.next
|
287
|
-
# } #=> :ok
|
288
|
-
# ```
|
1503
|
+
# loop do
|
1504
|
+
# print "Input: "
|
1505
|
+
# line = gets
|
1506
|
+
# break if !line or line =~ /^qQ/
|
1507
|
+
# # ...
|
1508
|
+
# end
|
1509
|
+
#
|
1510
|
+
# StopIteration raised in the block breaks the loop. In this case, loop returns
|
1511
|
+
# the "result" value stored in the exception.
|
1512
|
+
#
|
1513
|
+
# enum = Enumerator.new { |y|
|
1514
|
+
# y << "one"
|
1515
|
+
# y << "two"
|
1516
|
+
# :ok
|
1517
|
+
# }
|
1518
|
+
#
|
1519
|
+
# result = loop {
|
1520
|
+
# puts enum.next
|
1521
|
+
# } #=> :ok
|
1522
|
+
#
|
289
1523
|
def self?.loop: () { (nil) -> untyped } -> bot
|
290
|
-
|
1524
|
+
| () -> ::Enumerator[nil, bot]
|
291
1525
|
|
1526
|
+
# <!--
|
1527
|
+
# rdoc-file=io.c
|
1528
|
+
# - open(path [, mode [, perm]] [, opt]) -> io or nil
|
1529
|
+
# - open(path [, mode [, perm]] [, opt]) {|io| block } -> obj
|
1530
|
+
# -->
|
1531
|
+
# Creates an IO object connected to the given stream, file, or subprocess.
|
1532
|
+
#
|
1533
|
+
# If `path` does not start with a pipe character (`|`), treat it as the name of
|
1534
|
+
# a file to open using the specified mode (defaulting to "r").
|
1535
|
+
#
|
1536
|
+
# The `mode` is either a string or an integer. If it is an integer, it must be
|
1537
|
+
# bitwise-or of open(2) flags, such as File::RDWR or File::EXCL. If it is a
|
1538
|
+
# string, it is either "fmode", "fmode:ext_enc", or "fmode:ext_enc:int_enc".
|
1539
|
+
#
|
1540
|
+
# See the documentation of IO.new for full documentation of the `mode` string
|
1541
|
+
# directives.
|
1542
|
+
#
|
1543
|
+
# If a file is being created, its initial permissions may be set using the
|
1544
|
+
# `perm` parameter. See File.new and the open(2) and chmod(2) man pages for a
|
1545
|
+
# description of permissions.
|
1546
|
+
#
|
1547
|
+
# If a block is specified, it will be invoked with the IO object as a parameter,
|
1548
|
+
# and the IO will be automatically closed when the block terminates. The call
|
1549
|
+
# returns the value of the block.
|
1550
|
+
#
|
1551
|
+
# If `path` starts with a pipe character (`"|"`), a subprocess is created,
|
1552
|
+
# connected to the caller by a pair of pipes. The returned IO object may be
|
1553
|
+
# used to write to the standard input and read from the standard output of this
|
1554
|
+
# subprocess.
|
1555
|
+
#
|
1556
|
+
# If the command following the pipe is a single minus sign (`"|-"`), Ruby forks,
|
1557
|
+
# and this subprocess is connected to the parent. If the command is not `"-"`,
|
1558
|
+
# the subprocess runs the command. Note that the command may be processed by
|
1559
|
+
# shell if it contains shell metacharacters.
|
1560
|
+
#
|
1561
|
+
# When the subprocess is Ruby (opened via `"|-"`), the `open` call returns
|
1562
|
+
# `nil`. If a block is associated with the open call, that block will run twice
|
1563
|
+
# --- once in the parent and once in the child.
|
1564
|
+
#
|
1565
|
+
# The block parameter will be an IO object in the parent and `nil` in the child.
|
1566
|
+
# The parent's `IO` object will be connected to the child's $stdin and $stdout.
|
1567
|
+
# The subprocess will be terminated at the end of the block.
|
1568
|
+
#
|
1569
|
+
# ### Examples
|
1570
|
+
#
|
1571
|
+
# Reading from "testfile":
|
1572
|
+
#
|
1573
|
+
# open("testfile") do |f|
|
1574
|
+
# print f.gets
|
1575
|
+
# end
|
1576
|
+
#
|
1577
|
+
# Produces:
|
1578
|
+
#
|
1579
|
+
# This is line one
|
1580
|
+
#
|
1581
|
+
# Open a subprocess and read its output:
|
1582
|
+
#
|
1583
|
+
# cmd = open("|date")
|
1584
|
+
# print cmd.gets
|
1585
|
+
# cmd.close
|
1586
|
+
#
|
1587
|
+
# Produces:
|
1588
|
+
#
|
1589
|
+
# Wed Apr 9 08:56:31 CDT 2003
|
1590
|
+
#
|
1591
|
+
# Open a subprocess running the same Ruby program:
|
1592
|
+
#
|
1593
|
+
# f = open("|-", "w+")
|
1594
|
+
# if f.nil?
|
1595
|
+
# puts "in Child"
|
1596
|
+
# exit
|
1597
|
+
# else
|
1598
|
+
# puts "Got: #{f.gets}"
|
1599
|
+
# end
|
1600
|
+
#
|
1601
|
+
# Produces:
|
1602
|
+
#
|
1603
|
+
# Got: in Child
|
1604
|
+
#
|
1605
|
+
# Open a subprocess using a block to receive the IO object:
|
1606
|
+
#
|
1607
|
+
# open "|-" do |f|
|
1608
|
+
# if f then
|
1609
|
+
# # parent process
|
1610
|
+
# puts "Got: #{f.gets}"
|
1611
|
+
# else
|
1612
|
+
# # child process
|
1613
|
+
# puts "in Child"
|
1614
|
+
# end
|
1615
|
+
# end
|
1616
|
+
#
|
1617
|
+
# Produces:
|
1618
|
+
#
|
1619
|
+
# Got: in Child
|
1620
|
+
#
|
292
1621
|
def self?.open: (String name, ?String mode, ?Integer perm) -> IO?
|
293
|
-
|
1622
|
+
| [T] (String name, ?String mode, ?Integer perm) { (IO) -> T } -> T
|
294
1623
|
|
295
|
-
#
|
296
|
-
#
|
297
|
-
#
|
298
|
-
#
|
299
|
-
#
|
300
|
-
#
|
301
|
-
#
|
302
|
-
#
|
303
|
-
#
|
304
|
-
#
|
305
|
-
#
|
306
|
-
#
|
1624
|
+
# <!--
|
1625
|
+
# rdoc-file=io.c
|
1626
|
+
# - print(obj, ...) -> nil
|
1627
|
+
# -->
|
1628
|
+
# Prints each object in turn to `$stdout`. If the output field separator (`$,`)
|
1629
|
+
# is not `nil`, its contents will appear between each field. If the output
|
1630
|
+
# record separator (`$\`) is not `nil`, it will be appended to the output. If no
|
1631
|
+
# arguments are given, prints `$_`. Objects that aren't strings will be
|
1632
|
+
# converted by calling their `to_s` method.
|
1633
|
+
#
|
1634
|
+
# print "cat", [1,2,3], 99, "\n"
|
1635
|
+
# $, = ", "
|
1636
|
+
# $\ = "\n"
|
1637
|
+
# print "cat", [1,2,3], 99
|
307
1638
|
#
|
308
1639
|
# *produces:*
|
309
1640
|
#
|
310
1641
|
# cat12399
|
311
1642
|
# cat, 1, 2, 3, 99
|
1643
|
+
#
|
312
1644
|
def self?.print: (*Kernel args) -> nil
|
313
1645
|
|
1646
|
+
# <!--
|
1647
|
+
# rdoc-file=io.c
|
1648
|
+
# - printf(io, string [, obj ... ]) -> nil
|
1649
|
+
# - printf(string [, obj ... ]) -> nil
|
1650
|
+
# -->
|
1651
|
+
# Equivalent to:
|
1652
|
+
# io.write(sprintf(string, obj, ...))
|
1653
|
+
#
|
1654
|
+
# or
|
1655
|
+
# $stdout.write(sprintf(string, obj, ...))
|
1656
|
+
#
|
314
1657
|
def self?.printf: (IO arg0, String arg1, *untyped args) -> nil
|
315
|
-
|
316
|
-
|
1658
|
+
| (String arg1, *untyped args) -> nil
|
1659
|
+
| () -> nil
|
317
1660
|
|
1661
|
+
# <!--
|
1662
|
+
# rdoc-file=proc.c
|
1663
|
+
# - proc { |...| block } -> a_proc
|
1664
|
+
# -->
|
1665
|
+
# Equivalent to Proc.new.
|
1666
|
+
#
|
318
1667
|
def self?.proc: () { () -> untyped } -> Proc
|
319
1668
|
|
1669
|
+
# <!--
|
1670
|
+
# rdoc-file=proc.c
|
1671
|
+
# - lambda { |...| block } -> a_proc
|
1672
|
+
# -->
|
1673
|
+
# Equivalent to Proc.new, except the resulting Proc objects check the number of
|
1674
|
+
# parameters passed when called.
|
1675
|
+
#
|
320
1676
|
def self?.lambda: () { () -> untyped } -> Proc
|
321
1677
|
|
1678
|
+
# <!--
|
1679
|
+
# rdoc-file=io.c
|
1680
|
+
# - putc(int) -> int
|
1681
|
+
# -->
|
1682
|
+
# Equivalent to:
|
1683
|
+
#
|
1684
|
+
# $stdout.putc(int)
|
1685
|
+
#
|
1686
|
+
# Refer to the documentation for IO#putc for important information regarding
|
1687
|
+
# multi-byte characters.
|
1688
|
+
#
|
322
1689
|
def self?.putc: (Integer arg0) -> Integer
|
323
|
-
|
1690
|
+
| (String arg0) -> String
|
324
1691
|
|
1692
|
+
# <!--
|
1693
|
+
# rdoc-file=io.c
|
1694
|
+
# - puts(obj, ...) -> nil
|
1695
|
+
# -->
|
1696
|
+
# Equivalent to
|
1697
|
+
#
|
1698
|
+
# $stdout.puts(obj, ...)
|
1699
|
+
#
|
325
1700
|
def self?.puts: (*untyped arg0) -> NilClass
|
326
1701
|
|
1702
|
+
# <!--
|
1703
|
+
# rdoc-file=io.c
|
1704
|
+
# - p(obj) -> obj
|
1705
|
+
# - p(obj1, obj2, ...) -> [obj, ...]
|
1706
|
+
# - p() -> nil
|
1707
|
+
# -->
|
1708
|
+
# For each object, directly writes *obj*.`inspect` followed by a newline to the
|
1709
|
+
# program's standard output.
|
1710
|
+
#
|
1711
|
+
# S = Struct.new(:name, :state)
|
1712
|
+
# s = S['dave', 'TX']
|
1713
|
+
# p s
|
1714
|
+
#
|
1715
|
+
# *produces:*
|
1716
|
+
#
|
1717
|
+
# #<S name="dave", state="TX">
|
1718
|
+
#
|
327
1719
|
def self?.p: [T] (T arg0) -> T
|
328
|
-
|
1720
|
+
| (*untyped arg0) -> Array[untyped]
|
329
1721
|
|
1722
|
+
# <!--
|
1723
|
+
# rdoc-file=lib/pp.rb
|
1724
|
+
# - pp(*objs)
|
1725
|
+
# -->
|
1726
|
+
# prints arguments in pretty form.
|
1727
|
+
#
|
1728
|
+
# pp returns argument(s).
|
1729
|
+
#
|
330
1730
|
def self?.pp: [T] (T arg0) -> T
|
331
|
-
|
1731
|
+
| (*untyped arg0) -> Array[untyped]
|
332
1732
|
|
333
|
-
#
|
334
|
-
#
|
335
|
-
#
|
1733
|
+
# <!--
|
1734
|
+
# rdoc-file=random.c
|
1735
|
+
# - rand(max=0) -> number
|
1736
|
+
# -->
|
1737
|
+
# If called without an argument, or if `max.to_i.abs == 0`, rand returns a
|
1738
|
+
# pseudo-random floating point number between 0.0 and 1.0, including 0.0 and
|
1739
|
+
# excluding 1.0.
|
336
1740
|
#
|
337
|
-
#
|
338
|
-
# rand #=> 0.2725926052826416
|
339
|
-
# ```
|
1741
|
+
# rand #=> 0.2725926052826416
|
340
1742
|
#
|
341
|
-
# When `max.abs` is greater than or equal to 1, `rand` returns a
|
342
|
-
#
|
343
|
-
# `max.to_i.abs` .
|
1743
|
+
# When `max.abs` is greater than or equal to 1, `rand` returns a pseudo-random
|
1744
|
+
# integer greater than or equal to 0 and less than `max.to_i.abs`.
|
344
1745
|
#
|
345
|
-
#
|
346
|
-
# rand(100) #=> 12
|
347
|
-
# ```
|
1746
|
+
# rand(100) #=> 12
|
348
1747
|
#
|
349
|
-
# When `max` is a
|
350
|
-
#
|
1748
|
+
# When `max` is a Range, `rand` returns a random number where
|
1749
|
+
# range.member?(number) == true.
|
351
1750
|
#
|
352
1751
|
# Negative or floating point values for `max` are allowed, but may give
|
353
1752
|
# surprising results.
|
354
1753
|
#
|
355
|
-
#
|
356
|
-
#
|
357
|
-
#
|
358
|
-
#
|
359
|
-
#
|
1754
|
+
# rand(-100) # => 87
|
1755
|
+
# rand(-0.5) # => 0.8130921818028143
|
1756
|
+
# rand(1.9) # equivalent to rand(1), which is always 0
|
1757
|
+
#
|
1758
|
+
# Kernel.srand may be used to ensure that sequences of random numbers are
|
1759
|
+
# reproducible between different runs of a program.
|
360
1760
|
#
|
361
|
-
#
|
362
|
-
# ensure that sequences of random numbers are reproducible between
|
363
|
-
# different runs of a program.
|
1761
|
+
# See also Random.rand.
|
364
1762
|
#
|
365
|
-
# See also
|
366
|
-
# [Random\#rand](https://ruby-doc.org/core-2.6.3/Random.html#method-i-rand)
|
367
|
-
# .
|
368
1763
|
def self?.rand: () -> Float
|
369
|
-
|
370
|
-
|
371
|
-
|
1764
|
+
| (Integer arg0) -> Integer
|
1765
|
+
| (::Range[Integer] arg0) -> Integer
|
1766
|
+
| (::Range[Float] arg0) -> Float
|
372
1767
|
|
1768
|
+
# <!--
|
1769
|
+
# rdoc-file=io.c
|
1770
|
+
# - readline(sep=$/) -> string
|
1771
|
+
# - readline(limit) -> string
|
1772
|
+
# - readline(sep, limit) -> string
|
1773
|
+
# -->
|
1774
|
+
# Equivalent to Kernel::gets, except `readline` raises `EOFError` at end of
|
1775
|
+
# file.
|
1776
|
+
#
|
373
1777
|
def self?.readline: (?String arg0, ?Integer arg1) -> String
|
374
1778
|
|
1779
|
+
# <!--
|
1780
|
+
# rdoc-file=io.c
|
1781
|
+
# - readlines(sep=$/) -> array
|
1782
|
+
# - readlines(limit) -> array
|
1783
|
+
# - readlines(sep, limit) -> array
|
1784
|
+
# -->
|
1785
|
+
# Returns an array containing the lines returned by calling `Kernel.gets(*sep*)`
|
1786
|
+
# until the end of file.
|
1787
|
+
#
|
375
1788
|
def self?.readlines: (?String arg0, ?Integer arg1) -> ::Array[String]
|
376
1789
|
|
1790
|
+
# <!--
|
1791
|
+
# rdoc-file=load.c
|
1792
|
+
# - require(name) -> true or false
|
1793
|
+
# -->
|
1794
|
+
# Loads the given `name`, returning `true` if successful and `false` if the
|
1795
|
+
# feature is already loaded.
|
1796
|
+
#
|
1797
|
+
# If the filename neither resolves to an absolute path nor starts with './' or
|
1798
|
+
# '../', the file will be searched for in the library directories listed in
|
1799
|
+
# `$LOAD_PATH` (`$:`). If the filename starts with './' or '../', resolution is
|
1800
|
+
# based on Dir.pwd.
|
1801
|
+
#
|
1802
|
+
# If the filename has the extension ".rb", it is loaded as a source file; if the
|
1803
|
+
# extension is ".so", ".o", or ".dll", or the default shared library extension
|
1804
|
+
# on the current platform, Ruby loads the shared library as a Ruby extension.
|
1805
|
+
# Otherwise, Ruby tries adding ".rb", ".so", and so on to the name until found.
|
1806
|
+
# If the file named cannot be found, a LoadError will be raised.
|
1807
|
+
#
|
1808
|
+
# For Ruby extensions the filename given may use any shared library extension.
|
1809
|
+
# For example, on Linux the socket extension is "socket.so" and `require
|
1810
|
+
# 'socket.dll'` will load the socket extension.
|
1811
|
+
#
|
1812
|
+
# The absolute path of the loaded file is added to `$LOADED_FEATURES` (`$"`). A
|
1813
|
+
# file will not be loaded again if its path already appears in `$"`. For
|
1814
|
+
# example, `require 'a'; require './a'` will not load `a.rb` again.
|
1815
|
+
#
|
1816
|
+
# require "my-library.rb"
|
1817
|
+
# require "db-driver"
|
1818
|
+
#
|
1819
|
+
# Any constants or globals within the loaded source file will be available in
|
1820
|
+
# the calling program's global namespace. However, local variables will not be
|
1821
|
+
# propagated to the loading environment.
|
1822
|
+
#
|
377
1823
|
def self?.require: (String path) -> bool
|
378
1824
|
|
1825
|
+
# <!--
|
1826
|
+
# rdoc-file=load.c
|
1827
|
+
# - require_relative(string) -> true or false
|
1828
|
+
# -->
|
1829
|
+
# Ruby tries to load the library named *string* relative to the requiring file's
|
1830
|
+
# path. If the file's path cannot be determined a LoadError is raised. If a
|
1831
|
+
# file is loaded `true` is returned and false otherwise.
|
1832
|
+
#
|
379
1833
|
def self?.require_relative: (String feature) -> bool
|
380
1834
|
|
1835
|
+
# <!--
|
1836
|
+
# rdoc-file=io.c
|
1837
|
+
# - IO.select(read_array [, write_array [, error_array [, timeout]]]) -> array or nil
|
1838
|
+
# -->
|
1839
|
+
# Calls select(2) system call. It monitors given arrays of IO objects, waits
|
1840
|
+
# until one or more of IO objects are ready for reading, are ready for writing,
|
1841
|
+
# and have pending exceptions respectively, and returns an array that contains
|
1842
|
+
# arrays of those IO objects. It will return `nil` if optional *timeout* value
|
1843
|
+
# is given and no IO object is ready in *timeout* seconds.
|
1844
|
+
#
|
1845
|
+
# IO.select peeks the buffer of IO objects for testing readability. If the IO
|
1846
|
+
# buffer is not empty, IO.select immediately notifies readability. This "peek"
|
1847
|
+
# only happens for IO objects. It does not happen for IO-like objects such as
|
1848
|
+
# OpenSSL::SSL::SSLSocket.
|
1849
|
+
#
|
1850
|
+
# The best way to use IO.select is invoking it after nonblocking methods such as
|
1851
|
+
# #read_nonblock, #write_nonblock, etc. The methods raise an exception which is
|
1852
|
+
# extended by IO::WaitReadable or IO::WaitWritable. The modules notify how the
|
1853
|
+
# caller should wait with IO.select. If IO::WaitReadable is raised, the caller
|
1854
|
+
# should wait for reading. If IO::WaitWritable is raised, the caller should
|
1855
|
+
# wait for writing.
|
1856
|
+
#
|
1857
|
+
# So, blocking read (#readpartial) can be emulated using #read_nonblock and
|
1858
|
+
# IO.select as follows:
|
1859
|
+
#
|
1860
|
+
# begin
|
1861
|
+
# result = io_like.read_nonblock(maxlen)
|
1862
|
+
# rescue IO::WaitReadable
|
1863
|
+
# IO.select([io_like])
|
1864
|
+
# retry
|
1865
|
+
# rescue IO::WaitWritable
|
1866
|
+
# IO.select(nil, [io_like])
|
1867
|
+
# retry
|
1868
|
+
# end
|
1869
|
+
#
|
1870
|
+
# Especially, the combination of nonblocking methods and IO.select is preferred
|
1871
|
+
# for IO like objects such as OpenSSL::SSL::SSLSocket. It has #to_io method to
|
1872
|
+
# return underlying IO object. IO.select calls #to_io to obtain the file
|
1873
|
+
# descriptor to wait.
|
1874
|
+
#
|
1875
|
+
# This means that readability notified by IO.select doesn't mean readability
|
1876
|
+
# from OpenSSL::SSL::SSLSocket object.
|
1877
|
+
#
|
1878
|
+
# The most likely situation is that OpenSSL::SSL::SSLSocket buffers some data.
|
1879
|
+
# IO.select doesn't see the buffer. So IO.select can block when
|
1880
|
+
# OpenSSL::SSL::SSLSocket#readpartial doesn't block.
|
1881
|
+
#
|
1882
|
+
# However, several more complicated situations exist.
|
1883
|
+
#
|
1884
|
+
# SSL is a protocol which is sequence of records. The record consists of
|
1885
|
+
# multiple bytes. So, the remote side of SSL sends a partial record, IO.select
|
1886
|
+
# notifies readability but OpenSSL::SSL::SSLSocket cannot decrypt a byte and
|
1887
|
+
# OpenSSL::SSL::SSLSocket#readpartial will block.
|
1888
|
+
#
|
1889
|
+
# Also, the remote side can request SSL renegotiation which forces the local SSL
|
1890
|
+
# engine to write some data. This means OpenSSL::SSL::SSLSocket#readpartial may
|
1891
|
+
# invoke #write system call and it can block. In such a situation,
|
1892
|
+
# OpenSSL::SSL::SSLSocket#read_nonblock raises IO::WaitWritable instead of
|
1893
|
+
# blocking. So, the caller should wait for ready for writability as above
|
1894
|
+
# example.
|
1895
|
+
#
|
1896
|
+
# The combination of nonblocking methods and IO.select is also useful for
|
1897
|
+
# streams such as tty, pipe socket socket when multiple processes read from a
|
1898
|
+
# stream.
|
1899
|
+
#
|
1900
|
+
# Finally, Linux kernel developers don't guarantee that readability of select(2)
|
1901
|
+
# means readability of following read(2) even for a single process. See
|
1902
|
+
# select(2) manual on GNU/Linux system.
|
1903
|
+
#
|
1904
|
+
# Invoking IO.select before IO#readpartial works well as usual. However it is
|
1905
|
+
# not the best way to use IO.select.
|
1906
|
+
#
|
1907
|
+
# The writability notified by select(2) doesn't show how many bytes are
|
1908
|
+
# writable. IO#write method blocks until given whole string is written. So,
|
1909
|
+
# `IO#write(two or more bytes)` can block after writability is notified by
|
1910
|
+
# IO.select. IO#write_nonblock is required to avoid the blocking.
|
1911
|
+
#
|
1912
|
+
# Blocking write (#write) can be emulated using #write_nonblock and IO.select as
|
1913
|
+
# follows: IO::WaitReadable should also be rescued for SSL renegotiation in
|
1914
|
+
# OpenSSL::SSL::SSLSocket.
|
1915
|
+
#
|
1916
|
+
# while 0 < string.bytesize
|
1917
|
+
# begin
|
1918
|
+
# written = io_like.write_nonblock(string)
|
1919
|
+
# rescue IO::WaitReadable
|
1920
|
+
# IO.select([io_like])
|
1921
|
+
# retry
|
1922
|
+
# rescue IO::WaitWritable
|
1923
|
+
# IO.select(nil, [io_like])
|
1924
|
+
# retry
|
1925
|
+
# end
|
1926
|
+
# string = string.byteslice(written..-1)
|
1927
|
+
# end
|
1928
|
+
#
|
1929
|
+
# ### Parameters
|
1930
|
+
# read_array
|
1931
|
+
# : an array of IO objects that wait until ready for read
|
1932
|
+
# write_array
|
1933
|
+
# : an array of IO objects that wait until ready for write
|
1934
|
+
# error_array
|
1935
|
+
# : an array of IO objects that wait for exceptions
|
1936
|
+
# timeout
|
1937
|
+
# : a numeric value in second
|
1938
|
+
#
|
1939
|
+
#
|
1940
|
+
# ### Example
|
1941
|
+
#
|
1942
|
+
# rp, wp = IO.pipe
|
1943
|
+
# mesg = "ping "
|
1944
|
+
# 100.times {
|
1945
|
+
# # IO.select follows IO#read. Not the best way to use IO.select.
|
1946
|
+
# rs, ws, = IO.select([rp], [wp])
|
1947
|
+
# if r = rs[0]
|
1948
|
+
# ret = r.read(5)
|
1949
|
+
# print ret
|
1950
|
+
# case ret
|
1951
|
+
# when /ping/
|
1952
|
+
# mesg = "pong\n"
|
1953
|
+
# when /pong/
|
1954
|
+
# mesg = "ping "
|
1955
|
+
# end
|
1956
|
+
# end
|
1957
|
+
# if w = ws[0]
|
1958
|
+
# w.write(mesg)
|
1959
|
+
# end
|
1960
|
+
# }
|
1961
|
+
#
|
1962
|
+
# *produces:*
|
1963
|
+
#
|
1964
|
+
# ping pong
|
1965
|
+
# ping pong
|
1966
|
+
# ping pong
|
1967
|
+
# (snipped)
|
1968
|
+
# ping
|
1969
|
+
#
|
381
1970
|
def self?.select: (::Array[IO] read, ?::Array[IO] write, ?::Array[IO] error, ?Integer timeout) -> ::Array[String]
|
382
1971
|
|
1972
|
+
# <!--
|
1973
|
+
# rdoc-file=process.c
|
1974
|
+
# - sleep([duration]) -> integer
|
1975
|
+
# -->
|
1976
|
+
# Suspends the current thread for *duration* seconds (which may be any number,
|
1977
|
+
# including a `Float` with fractional seconds). Returns the actual number of
|
1978
|
+
# seconds slept (rounded), which may be less than that asked for if another
|
1979
|
+
# thread calls Thread#run. Called without an argument, sleep() will sleep
|
1980
|
+
# forever.
|
1981
|
+
#
|
1982
|
+
# Time.new #=> 2008-03-08 19:56:19 +0900
|
1983
|
+
# sleep 1.2 #=> 1
|
1984
|
+
# Time.new #=> 2008-03-08 19:56:20 +0900
|
1985
|
+
# sleep 1.9 #=> 2
|
1986
|
+
# Time.new #=> 2008-03-08 19:56:22 +0900
|
1987
|
+
#
|
383
1988
|
def self?.sleep: () -> bot
|
384
|
-
|
1989
|
+
| (Numeric duration) -> Integer
|
385
1990
|
|
1991
|
+
# <!--
|
1992
|
+
# rdoc-file=io.c
|
1993
|
+
# - syscall(num [, args...]) -> integer
|
1994
|
+
# -->
|
1995
|
+
# Calls the operating system function identified by *num* and returns the result
|
1996
|
+
# of the function or raises SystemCallError if it failed.
|
1997
|
+
#
|
1998
|
+
# Arguments for the function can follow *num*. They must be either `String`
|
1999
|
+
# objects or `Integer` objects. A `String` object is passed as a pointer to the
|
2000
|
+
# byte sequence. An `Integer` object is passed as an integer whose bit size is
|
2001
|
+
# the same as a pointer. Up to nine parameters may be passed.
|
2002
|
+
#
|
2003
|
+
# The function identified by *num* is system dependent. On some Unix systems,
|
2004
|
+
# the numbers may be obtained from a header file called `syscall.h`.
|
2005
|
+
#
|
2006
|
+
# syscall 4, 1, "hello\n", 6 # '4' is write(2) on our box
|
2007
|
+
#
|
2008
|
+
# *produces:*
|
2009
|
+
#
|
2010
|
+
# hello
|
2011
|
+
#
|
2012
|
+
# Calling `syscall` on a platform which does not have any way to an arbitrary
|
2013
|
+
# system function just fails with NotImplementedError.
|
2014
|
+
#
|
2015
|
+
# **Note:** `syscall` is essentially unsafe and unportable. Feel free to shoot
|
2016
|
+
# your foot. The DL (Fiddle) library is preferred for safer and a bit more
|
2017
|
+
# portable programming.
|
2018
|
+
#
|
386
2019
|
def self?.syscall: (Integer num, *untyped args) -> untyped
|
387
2020
|
|
2021
|
+
# <!--
|
2022
|
+
# rdoc-file=file.c
|
2023
|
+
# - test(cmd, file1 [, file2] ) -> obj
|
2024
|
+
# -->
|
2025
|
+
# Uses the character `cmd` to perform various tests on `file1` (first table
|
2026
|
+
# below) or on `file1` and `file2` (second table).
|
2027
|
+
#
|
2028
|
+
# File tests on a single file:
|
2029
|
+
#
|
2030
|
+
# Cmd Returns Meaning
|
2031
|
+
# "A" | Time | Last access time for file1
|
2032
|
+
# "b" | boolean | True if file1 is a block device
|
2033
|
+
# "c" | boolean | True if file1 is a character device
|
2034
|
+
# "C" | Time | Last change time for file1
|
2035
|
+
# "d" | boolean | True if file1 exists and is a directory
|
2036
|
+
# "e" | boolean | True if file1 exists
|
2037
|
+
# "f" | boolean | True if file1 exists and is a regular file
|
2038
|
+
# "g" | boolean | True if file1 has the \CF{setgid} bit
|
2039
|
+
# | | set (false under NT)
|
2040
|
+
# "G" | boolean | True if file1 exists and has a group
|
2041
|
+
# | | ownership equal to the caller's group
|
2042
|
+
# "k" | boolean | True if file1 exists and has the sticky bit set
|
2043
|
+
# "l" | boolean | True if file1 exists and is a symbolic link
|
2044
|
+
# "M" | Time | Last modification time for file1
|
2045
|
+
# "o" | boolean | True if file1 exists and is owned by
|
2046
|
+
# | | the caller's effective uid
|
2047
|
+
# "O" | boolean | True if file1 exists and is owned by
|
2048
|
+
# | | the caller's real uid
|
2049
|
+
# "p" | boolean | True if file1 exists and is a fifo
|
2050
|
+
# "r" | boolean | True if file1 is readable by the effective
|
2051
|
+
# | | uid/gid of the caller
|
2052
|
+
# "R" | boolean | True if file is readable by the real
|
2053
|
+
# | | uid/gid of the caller
|
2054
|
+
# "s" | int/nil | If file1 has nonzero size, return the size,
|
2055
|
+
# | | otherwise return nil
|
2056
|
+
# "S" | boolean | True if file1 exists and is a socket
|
2057
|
+
# "u" | boolean | True if file1 has the setuid bit set
|
2058
|
+
# "w" | boolean | True if file1 exists and is writable by
|
2059
|
+
# | | the effective uid/gid
|
2060
|
+
# "W" | boolean | True if file1 exists and is writable by
|
2061
|
+
# | | the real uid/gid
|
2062
|
+
# "x" | boolean | True if file1 exists and is executable by
|
2063
|
+
# | | the effective uid/gid
|
2064
|
+
# "X" | boolean | True if file1 exists and is executable by
|
2065
|
+
# | | the real uid/gid
|
2066
|
+
# "z" | boolean | True if file1 exists and has a zero length
|
2067
|
+
#
|
2068
|
+
# Tests that take two files:
|
2069
|
+
#
|
2070
|
+
# "-" | boolean | True if file1 and file2 are identical
|
2071
|
+
# "=" | boolean | True if the modification times of file1
|
2072
|
+
# | | and file2 are equal
|
2073
|
+
# "<" | boolean | True if the modification time of file1
|
2074
|
+
# | | is prior to that of file2
|
2075
|
+
# ">" | boolean | True if the modification time of file1
|
2076
|
+
# | | is after that of file2
|
2077
|
+
#
|
388
2078
|
def self?.test: (String | Integer cmd, String | IO file1, ?String | IO file2) -> (TrueClass | FalseClass | Time | nil | Integer)
|
389
2079
|
|
2080
|
+
# <!--
|
2081
|
+
# rdoc-file=vm_eval.c
|
2082
|
+
# - throw(tag [, obj])
|
2083
|
+
# -->
|
2084
|
+
# Transfers control to the end of the active `catch` block waiting for *tag*.
|
2085
|
+
# Raises `UncaughtThrowError` if there is no `catch` block for the *tag*. The
|
2086
|
+
# optional second parameter supplies a return value for the `catch` block, which
|
2087
|
+
# otherwise defaults to `nil`. For examples, see Kernel::catch.
|
2088
|
+
#
|
390
2089
|
def self?.throw: (Object tag, ?untyped obj) -> bot
|
391
2090
|
|
392
|
-
|
393
|
-
|
394
|
-
#
|
395
|
-
#
|
2091
|
+
# <!--
|
2092
|
+
# rdoc-file=warning.rb
|
2093
|
+
# - warn(*msgs, uplevel: nil, category: nil) -> nil
|
2094
|
+
# -->
|
2095
|
+
# If warnings have been disabled (for example with the `-W0` flag), does
|
2096
|
+
# nothing. Otherwise, converts each of the messages to strings, appends a
|
2097
|
+
# newline character to the string if the string does not end in a newline, and
|
2098
|
+
# calls Warning.warn with the string.
|
2099
|
+
#
|
2100
|
+
# warn("warning 1", "warning 2")
|
2101
|
+
#
|
2102
|
+
# <em>produces:</em>
|
2103
|
+
#
|
2104
|
+
# warning 1
|
2105
|
+
# warning 2
|
2106
|
+
#
|
2107
|
+
# If the `uplevel` keyword argument is given, the string will be prepended with
|
2108
|
+
# information for the given caller frame in the same format used by the
|
2109
|
+
# `rb_warn` C function.
|
396
2110
|
#
|
397
|
-
#
|
398
|
-
#
|
2111
|
+
# # In baz.rb
|
2112
|
+
# def foo
|
2113
|
+
# warn("invalid call to foo", uplevel: 1)
|
2114
|
+
# end
|
399
2115
|
#
|
400
|
-
#
|
401
|
-
#
|
2116
|
+
# def bar
|
2117
|
+
# foo
|
2118
|
+
# end
|
402
2119
|
#
|
403
|
-
#
|
404
|
-
# command name, [argv](https://ruby-doc.org/core-2.6.3/0) and zero or
|
405
|
-
# more arguments (no shell)
|
2120
|
+
# bar
|
406
2121
|
#
|
407
|
-
#
|
408
|
-
# to shell expansion before being executed.
|
2122
|
+
# <em>produces:</em>
|
409
2123
|
#
|
410
|
-
#
|
411
|
-
# as `ENV["RUBYSHELL"]` (or `ENV["COMSPEC"]` on Windows NT series), and
|
412
|
-
# similar.
|
2124
|
+
# baz.rb:6: warning: invalid call to foo
|
413
2125
|
#
|
414
|
-
# If
|
415
|
-
#
|
2126
|
+
# If `category` keyword argument is given, passes the category to
|
2127
|
+
# `Warning.warn`. The category given must be be one of the following
|
2128
|
+
# categories:
|
416
2129
|
#
|
417
|
-
#
|
2130
|
+
# :deprecated
|
2131
|
+
# : Used for warning for deprecated functionality that may be removed in the
|
2132
|
+
# future.
|
2133
|
+
# :experimental
|
2134
|
+
# : Used for experimental features that may change in future releases.
|
418
2135
|
#
|
419
|
-
|
2136
|
+
def self?.warn: (*untyped msg, ?uplevel: Integer | nil) -> NilClass
|
2137
|
+
|
2138
|
+
# <!--
|
2139
|
+
# rdoc-file=process.c
|
2140
|
+
# - exec([env,] command... [,options])
|
2141
|
+
# -->
|
2142
|
+
# Replaces the current process by running the given external *command*, which
|
2143
|
+
# can take one of the following forms:
|
2144
|
+
#
|
2145
|
+
# `exec(commandline)`
|
2146
|
+
# : command line string which is passed to the standard shell
|
2147
|
+
# `exec(cmdname, arg1, ...)`
|
2148
|
+
# : command name and one or more arguments (no shell)
|
2149
|
+
# `exec([cmdname, argv0], arg1, ...)`
|
2150
|
+
# : command name, [argv](0) and zero or more arguments (no shell)
|
2151
|
+
#
|
2152
|
+
#
|
2153
|
+
# In the first form, the string is taken as a command line that is subject to
|
2154
|
+
# shell expansion before being executed.
|
420
2155
|
#
|
421
|
-
#
|
2156
|
+
# The standard shell always means `"/bin/sh"` on Unix-like systems, otherwise,
|
2157
|
+
# `ENV["RUBYSHELL"]` or `ENV["COMSPEC"]` on Windows and similar. The command is
|
2158
|
+
# passed as an argument to the `"-c"` switch to the shell, except in the case of
|
2159
|
+
# `COMSPEC`.
|
422
2160
|
#
|
423
|
-
#
|
424
|
-
#
|
2161
|
+
# If the string from the first form (`exec("command")`) follows these simple
|
2162
|
+
# rules:
|
425
2163
|
#
|
426
|
-
#
|
427
|
-
#
|
428
|
-
#
|
429
|
-
# [IO.popen](https://ruby-doc.org/core-2.6.3/IO.html#method-c-popen) ) is
|
430
|
-
# the pid of the invoked command, not shell.
|
2164
|
+
# * no meta characters
|
2165
|
+
# * not starting with shell reserved word or special built-in
|
2166
|
+
# * Ruby invokes the command directly without shell
|
431
2167
|
#
|
432
|
-
# In the second form ( `exec("command1", "arg1", ...)` ), the first is
|
433
|
-
# taken as a command name and the rest are passed as parameters to command
|
434
|
-
# with no shell expansion.
|
435
2168
|
#
|
436
|
-
#
|
437
|
-
#
|
438
|
-
# element is the command to be executed, and the second argument is used
|
439
|
-
# as the `argv[0]` value, which may show up in process listings.
|
2169
|
+
# You can force shell invocation by adding ";" to the string (because ";" is a
|
2170
|
+
# meta character).
|
440
2171
|
#
|
441
|
-
#
|
442
|
-
#
|
443
|
-
# original program (including open file descriptors).
|
2172
|
+
# Note that this behavior is observable by pid obtained (return value of spawn()
|
2173
|
+
# and IO#pid for IO.popen) is the pid of the invoked command, not shell.
|
444
2174
|
#
|
445
|
-
#
|
446
|
-
#
|
2175
|
+
# In the second form (`exec("command1", "arg1", ...)`), the first is taken as a
|
2176
|
+
# command name and the rest are passed as parameters to command with no shell
|
2177
|
+
# expansion.
|
447
2178
|
#
|
448
|
-
#
|
449
|
-
#
|
450
|
-
# [
|
451
|
-
#
|
2179
|
+
# In the third form (`exec(["command", "argv0"], "arg1", ...)`), starting a
|
2180
|
+
# two-element array at the beginning of the command, the first element is the
|
2181
|
+
# command to be executed, and the second argument is used as the `argv[0]`
|
2182
|
+
# value, which may show up in process listings.
|
452
2183
|
#
|
453
|
-
#
|
454
|
-
#
|
455
|
-
#
|
2184
|
+
# In order to execute the command, one of the `exec(2)` system calls are used,
|
2185
|
+
# so the running command may inherit some of the environment of the original
|
2186
|
+
# program (including open file descriptors).
|
456
2187
|
#
|
457
|
-
#
|
458
|
-
#
|
2188
|
+
# This behavior is modified by the given `env` and `options` parameters. See
|
2189
|
+
# ::spawn for details.
|
2190
|
+
#
|
2191
|
+
# If the command fails to execute (typically Errno::ENOENT when it was not
|
2192
|
+
# found) a SystemCallError exception is raised.
|
2193
|
+
#
|
2194
|
+
# This method modifies process attributes according to given `options` before
|
2195
|
+
# `exec(2)` system call. See ::spawn for more details about the given `options`.
|
2196
|
+
#
|
2197
|
+
# The modified attributes may be retained when `exec(2)` system call fails.
|
459
2198
|
#
|
460
2199
|
# For example, hard resource limits are not restorable.
|
461
2200
|
#
|
462
|
-
# Consider to create a child process using ::spawn or
|
463
|
-
#
|
464
|
-
#
|
2201
|
+
# Consider to create a child process using ::spawn or Kernel#system if this is
|
2202
|
+
# not acceptable.
|
2203
|
+
#
|
2204
|
+
# exec "echo *" # echoes list of files in current directory
|
2205
|
+
# # never get here
|
465
2206
|
#
|
466
|
-
#
|
467
|
-
#
|
468
|
-
# # never get here
|
2207
|
+
# exec "echo", "*" # echoes an asterisk
|
2208
|
+
# # never get here
|
469
2209
|
#
|
470
|
-
# exec "echo", "*" # echoes an asterisk
|
471
|
-
# # never get here
|
472
|
-
# ```
|
473
2210
|
def self?.exec: (*String args) -> bot
|
474
2211
|
|
475
|
-
type redirect_fd = Integer
|
476
|
-
| :in | :out | :err # standard input / output / error
|
477
|
-
| IO # the file descriptor specified as io.fileno
|
478
|
-
| String # redirect to file with open(string, File::RDONLY)
|
479
|
-
| [String] # # redirect to file with open(string, File::RDONLY)
|
480
|
-
| [String, string | int] # redirect to file with open(string, open_mode, 0644)
|
481
|
-
| [String, string | int, int] # redirect to file with open(string, open_mode, perm)
|
482
|
-
| [:child, int] # redirect to the redirected file descriptor
|
483
|
-
| :close # close the file descriptor in child process
|
2212
|
+
type redirect_fd = Integer | :in | :out | :err | IO | String | [ String ] | [ String, string | int ] | [ String, string | int, int ] | [ :child, int ] | :close
|
484
2213
|
|
485
|
-
|
486
|
-
|
2214
|
+
# <!--
|
2215
|
+
# rdoc-file=process.c
|
2216
|
+
# - spawn([env,] command... [,options]) -> pid
|
2217
|
+
# - Process.spawn([env,] command... [,options]) -> pid
|
2218
|
+
# -->
|
2219
|
+
# spawn executes specified command and return its pid.
|
2220
|
+
#
|
2221
|
+
# pid = spawn("tar xf ruby-2.0.0-p195.tar.bz2")
|
2222
|
+
# Process.wait pid
|
2223
|
+
#
|
2224
|
+
# pid = spawn(RbConfig.ruby, "-eputs'Hello, world!'")
|
2225
|
+
# Process.wait pid
|
2226
|
+
#
|
2227
|
+
# This method is similar to Kernel#system but it doesn't wait for the command to
|
2228
|
+
# finish.
|
2229
|
+
#
|
2230
|
+
# The parent process should use Process.wait to collect the termination status
|
2231
|
+
# of its child or use Process.detach to register disinterest in their status;
|
2232
|
+
# otherwise, the operating system may accumulate zombie processes.
|
2233
|
+
#
|
2234
|
+
# spawn has bunch of options to specify process attributes:
|
2235
|
+
#
|
2236
|
+
# env: hash
|
2237
|
+
# name => val : set the environment variable
|
2238
|
+
# name => nil : unset the environment variable
|
2239
|
+
#
|
2240
|
+
# the keys and the values except for +nil+ must be strings.
|
2241
|
+
# command...:
|
2242
|
+
# commandline : command line string which is passed to the standard shell
|
2243
|
+
# cmdname, arg1, ... : command name and one or more arguments (This form does not use the shell. See below for caveats.)
|
2244
|
+
# [cmdname, argv0], arg1, ... : command name, argv[0] and zero or more arguments (no shell)
|
2245
|
+
# options: hash
|
2246
|
+
# clearing environment variables:
|
2247
|
+
# :unsetenv_others => true : clear environment variables except specified by env
|
2248
|
+
# :unsetenv_others => false : don't clear (default)
|
2249
|
+
# process group:
|
2250
|
+
# :pgroup => true or 0 : make a new process group
|
2251
|
+
# :pgroup => pgid : join the specified process group
|
2252
|
+
# :pgroup => nil : don't change the process group (default)
|
2253
|
+
# create new process group: Windows only
|
2254
|
+
# :new_pgroup => true : the new process is the root process of a new process group
|
2255
|
+
# :new_pgroup => false : don't create a new process group (default)
|
2256
|
+
# resource limit: resourcename is core, cpu, data, etc. See Process.setrlimit.
|
2257
|
+
# :rlimit_resourcename => limit
|
2258
|
+
# :rlimit_resourcename => [cur_limit, max_limit]
|
2259
|
+
# umask:
|
2260
|
+
# :umask => int
|
2261
|
+
# redirection:
|
2262
|
+
# key:
|
2263
|
+
# FD : single file descriptor in child process
|
2264
|
+
# [FD, FD, ...] : multiple file descriptor in child process
|
2265
|
+
# value:
|
2266
|
+
# FD : redirect to the file descriptor in parent process
|
2267
|
+
# string : redirect to file with open(string, "r" or "w")
|
2268
|
+
# [string] : redirect to file with open(string, File::RDONLY)
|
2269
|
+
# [string, open_mode] : redirect to file with open(string, open_mode, 0644)
|
2270
|
+
# [string, open_mode, perm] : redirect to file with open(string, open_mode, perm)
|
2271
|
+
# [:child, FD] : redirect to the redirected file descriptor
|
2272
|
+
# :close : close the file descriptor in child process
|
2273
|
+
# FD is one of follows
|
2274
|
+
# :in : the file descriptor 0 which is the standard input
|
2275
|
+
# :out : the file descriptor 1 which is the standard output
|
2276
|
+
# :err : the file descriptor 2 which is the standard error
|
2277
|
+
# integer : the file descriptor of specified the integer
|
2278
|
+
# io : the file descriptor specified as io.fileno
|
2279
|
+
# file descriptor inheritance: close non-redirected non-standard fds (3, 4, 5, ...) or not
|
2280
|
+
# :close_others => false : inherit
|
2281
|
+
# current directory:
|
2282
|
+
# :chdir => str
|
2283
|
+
#
|
2284
|
+
# The `cmdname, arg1, ...` form does not use the shell. However, on different
|
2285
|
+
# OSes, different things are provided as built-in commands. An example of this
|
2286
|
+
# is +'echo'+, which is a built-in on Windows, but is a normal program on Linux
|
2287
|
+
# and Mac OS X. This means that `Process.spawn 'echo', '%Path%'` will display
|
2288
|
+
# the contents of the `%Path%` environment variable on Windows, but
|
2289
|
+
# `Process.spawn 'echo', '$PATH'` prints the literal `$PATH`.
|
2290
|
+
#
|
2291
|
+
# If a hash is given as `env`, the environment is updated by `env` before
|
2292
|
+
# `exec(2)` in the child process. If a pair in `env` has nil as the value, the
|
2293
|
+
# variable is deleted.
|
2294
|
+
#
|
2295
|
+
# # set FOO as BAR and unset BAZ.
|
2296
|
+
# pid = spawn({"FOO"=>"BAR", "BAZ"=>nil}, command)
|
2297
|
+
#
|
2298
|
+
# If a hash is given as `options`, it specifies process group, create new
|
2299
|
+
# process group, resource limit, current directory, umask and redirects for the
|
2300
|
+
# child process. Also, it can be specified to clear environment variables.
|
2301
|
+
#
|
2302
|
+
# The `:unsetenv_others` key in `options` specifies to clear environment
|
2303
|
+
# variables, other than specified by `env`.
|
2304
|
+
#
|
2305
|
+
# pid = spawn(command, :unsetenv_others=>true) # no environment variable
|
2306
|
+
# pid = spawn({"FOO"=>"BAR"}, command, :unsetenv_others=>true) # FOO only
|
2307
|
+
#
|
2308
|
+
# The `:pgroup` key in `options` specifies a process group. The corresponding
|
2309
|
+
# value should be true, zero, a positive integer, or nil. true and zero cause
|
2310
|
+
# the process to be a process leader of a new process group. A non-zero positive
|
2311
|
+
# integer causes the process to join the provided process group. The default
|
2312
|
+
# value, nil, causes the process to remain in the same process group.
|
2313
|
+
#
|
2314
|
+
# pid = spawn(command, :pgroup=>true) # process leader
|
2315
|
+
# pid = spawn(command, :pgroup=>10) # belongs to the process group 10
|
2316
|
+
#
|
2317
|
+
# The `:new_pgroup` key in `options` specifies to pass
|
2318
|
+
# `CREATE_NEW_PROCESS_GROUP` flag to `CreateProcessW()` that is Windows API.
|
2319
|
+
# This option is only for Windows. true means the new process is the root
|
2320
|
+
# process of the new process group. The new process has CTRL+C disabled. This
|
2321
|
+
# flag is necessary for `Process.kill(:SIGINT, pid)` on the subprocess.
|
2322
|
+
# :new_pgroup is false by default.
|
2323
|
+
#
|
2324
|
+
# pid = spawn(command, :new_pgroup=>true) # new process group
|
2325
|
+
# pid = spawn(command, :new_pgroup=>false) # same process group
|
2326
|
+
#
|
2327
|
+
# The `:rlimit_`*foo* key specifies a resource limit. *foo* should be one of
|
2328
|
+
# resource types such as `core`. The corresponding value should be an integer or
|
2329
|
+
# an array which have one or two integers: same as cur_limit and max_limit
|
2330
|
+
# arguments for Process.setrlimit.
|
2331
|
+
#
|
2332
|
+
# cur, max = Process.getrlimit(:CORE)
|
2333
|
+
# pid = spawn(command, :rlimit_core=>[0,max]) # disable core temporary.
|
2334
|
+
# pid = spawn(command, :rlimit_core=>max) # enable core dump
|
2335
|
+
# pid = spawn(command, :rlimit_core=>0) # never dump core.
|
2336
|
+
#
|
2337
|
+
# The `:umask` key in `options` specifies the umask.
|
2338
|
+
#
|
2339
|
+
# pid = spawn(command, :umask=>077)
|
2340
|
+
#
|
2341
|
+
# The :in, :out, :err, an integer, an IO and an array key specifies a
|
2342
|
+
# redirection. The redirection maps a file descriptor in the child process.
|
2343
|
+
#
|
2344
|
+
# For example, stderr can be merged into stdout as follows:
|
2345
|
+
#
|
2346
|
+
# pid = spawn(command, :err=>:out)
|
2347
|
+
# pid = spawn(command, 2=>1)
|
2348
|
+
# pid = spawn(command, STDERR=>:out)
|
2349
|
+
# pid = spawn(command, STDERR=>STDOUT)
|
2350
|
+
#
|
2351
|
+
# The hash keys specifies a file descriptor in the child process started by
|
2352
|
+
# #spawn. :err, 2 and STDERR specifies the standard error stream (stderr).
|
2353
|
+
#
|
2354
|
+
# The hash values specifies a file descriptor in the parent process which
|
2355
|
+
# invokes #spawn. :out, 1 and STDOUT specifies the standard output stream
|
2356
|
+
# (stdout).
|
2357
|
+
#
|
2358
|
+
# In the above example, the standard output in the child process is not
|
2359
|
+
# specified. So it is inherited from the parent process.
|
2360
|
+
#
|
2361
|
+
# The standard input stream (stdin) can be specified by :in, 0 and STDIN.
|
2362
|
+
#
|
2363
|
+
# A filename can be specified as a hash value.
|
2364
|
+
#
|
2365
|
+
# pid = spawn(command, :in=>"/dev/null") # read mode
|
2366
|
+
# pid = spawn(command, :out=>"/dev/null") # write mode
|
2367
|
+
# pid = spawn(command, :err=>"log") # write mode
|
2368
|
+
# pid = spawn(command, [:out, :err]=>"/dev/null") # write mode
|
2369
|
+
# pid = spawn(command, 3=>"/dev/null") # read mode
|
2370
|
+
#
|
2371
|
+
# For stdout and stderr (and combination of them), it is opened in write mode.
|
2372
|
+
# Otherwise read mode is used.
|
2373
|
+
#
|
2374
|
+
# For specifying flags and permission of file creation explicitly, an array is
|
2375
|
+
# used instead.
|
2376
|
+
#
|
2377
|
+
# pid = spawn(command, :in=>["file"]) # read mode is assumed
|
2378
|
+
# pid = spawn(command, :in=>["file", "r"])
|
2379
|
+
# pid = spawn(command, :out=>["log", "w"]) # 0644 assumed
|
2380
|
+
# pid = spawn(command, :out=>["log", "w", 0600])
|
2381
|
+
# pid = spawn(command, :out=>["log", File::WRONLY|File::EXCL|File::CREAT, 0600])
|
2382
|
+
#
|
2383
|
+
# The array specifies a filename, flags and permission. The flags can be a
|
2384
|
+
# string or an integer. If the flags is omitted or nil, File::RDONLY is assumed.
|
2385
|
+
# The permission should be an integer. If the permission is omitted or nil, 0644
|
2386
|
+
# is assumed.
|
2387
|
+
#
|
2388
|
+
# If an array of IOs and integers are specified as a hash key, all the elements
|
2389
|
+
# are redirected.
|
2390
|
+
#
|
2391
|
+
# # stdout and stderr is redirected to log file.
|
2392
|
+
# # The file "log" is opened just once.
|
2393
|
+
# pid = spawn(command, [:out, :err]=>["log", "w"])
|
2394
|
+
#
|
2395
|
+
# Another way to merge multiple file descriptors is [:child, fd]. [:child, fd]
|
2396
|
+
# means the file descriptor in the child process. This is different from fd. For
|
2397
|
+
# example, :err=>:out means redirecting child stderr to parent stdout. But
|
2398
|
+
# :err=>[:child, :out] means redirecting child stderr to child stdout. They
|
2399
|
+
# differ if stdout is redirected in the child process as follows.
|
2400
|
+
#
|
2401
|
+
# # stdout and stderr is redirected to log file.
|
2402
|
+
# # The file "log" is opened just once.
|
2403
|
+
# pid = spawn(command, :out=>["log", "w"], :err=>[:child, :out])
|
2404
|
+
#
|
2405
|
+
# [:child, :out] can be used to merge stderr into stdout in IO.popen. In this
|
2406
|
+
# case, IO.popen redirects stdout to a pipe in the child process and [:child,
|
2407
|
+
# :out] refers the redirected stdout.
|
2408
|
+
#
|
2409
|
+
# io = IO.popen(["sh", "-c", "echo out; echo err >&2", :err=>[:child, :out]])
|
2410
|
+
# p io.read #=> "out\nerr\n"
|
2411
|
+
#
|
2412
|
+
# The `:chdir` key in `options` specifies the current directory.
|
2413
|
+
#
|
2414
|
+
# pid = spawn(command, :chdir=>"/var/tmp")
|
2415
|
+
#
|
2416
|
+
# spawn closes all non-standard unspecified descriptors by default. The
|
2417
|
+
# "standard" descriptors are 0, 1 and 2. This behavior is specified by
|
2418
|
+
# :close_others option. :close_others doesn't affect the standard descriptors
|
2419
|
+
# which are closed only if :close is specified explicitly.
|
2420
|
+
#
|
2421
|
+
# pid = spawn(command, :close_others=>true) # close 3,4,5,... (default)
|
2422
|
+
# pid = spawn(command, :close_others=>false) # don't close 3,4,5,...
|
2423
|
+
#
|
2424
|
+
# :close_others is false by default for spawn and IO.popen.
|
2425
|
+
#
|
2426
|
+
# Note that fds which close-on-exec flag is already set are closed regardless of
|
2427
|
+
# :close_others option.
|
2428
|
+
#
|
2429
|
+
# So IO.pipe and spawn can be used as IO.popen.
|
2430
|
+
#
|
2431
|
+
# # similar to r = IO.popen(command)
|
2432
|
+
# r, w = IO.pipe
|
2433
|
+
# pid = spawn(command, :out=>w) # r, w is closed in the child process.
|
2434
|
+
# w.close
|
2435
|
+
#
|
2436
|
+
# :close is specified as a hash value to close a fd individually.
|
2437
|
+
#
|
2438
|
+
# f = open(foo)
|
2439
|
+
# system(command, f=>:close) # don't inherit f.
|
2440
|
+
#
|
2441
|
+
# If a file descriptor need to be inherited, io=>io can be used.
|
2442
|
+
#
|
2443
|
+
# # valgrind has --log-fd option for log destination.
|
2444
|
+
# # log_w=>log_w indicates log_w.fileno inherits to child process.
|
2445
|
+
# log_r, log_w = IO.pipe
|
2446
|
+
# pid = spawn("valgrind", "--log-fd=#{log_w.fileno}", "echo", "a", log_w=>log_w)
|
2447
|
+
# log_w.close
|
2448
|
+
# p log_r.read
|
2449
|
+
#
|
2450
|
+
# It is also possible to exchange file descriptors.
|
2451
|
+
#
|
2452
|
+
# pid = spawn(command, :out=>:err, :err=>:out)
|
2453
|
+
#
|
2454
|
+
# The hash keys specify file descriptors in the child process. The hash values
|
2455
|
+
# specifies file descriptors in the parent process. So the above specifies
|
2456
|
+
# exchanging stdout and stderr. Internally, `spawn` uses an extra file
|
2457
|
+
# descriptor to resolve such cyclic file descriptor mapping.
|
2458
|
+
#
|
2459
|
+
# See Kernel.exec for the standard shell.
|
2460
|
+
#
|
2461
|
+
def self?.spawn: (String command, *String args, ?unsetenv_others: boolish, ?pgroup: true | Integer, ?umask: Integer, ?in: redirect_fd, ?out: redirect_fd, ?err: redirect_fd, ?close_others: boolish, ?chdir: String) -> Integer
|
2462
|
+
| (Hash[string, string?] env, String command, *String args, ?unsetenv_others: boolish, ?pgroup: true | Integer, ?umask: Integer, ?in: redirect_fd, ?out: redirect_fd, ?err: redirect_fd, ?close_others: boolish, ?chdir: String) -> Integer
|
487
2463
|
|
488
|
-
#
|
2464
|
+
# <!--
|
2465
|
+
# rdoc-file=process.c
|
2466
|
+
# - system([env,] command... [,options], exception: false) -> true, false or nil
|
2467
|
+
# -->
|
2468
|
+
# Executes *command...* in a subshell. *command...* is one of following forms.
|
2469
|
+
#
|
2470
|
+
# `commandline`
|
2471
|
+
# : command line string which is passed to the standard shell
|
2472
|
+
# `cmdname, arg1, ...`
|
2473
|
+
# : command name and one or more arguments (no shell)
|
2474
|
+
# `[cmdname, argv0], arg1, ...`
|
2475
|
+
# : command name, `argv[0]` and zero or more arguments (no shell)
|
2476
|
+
#
|
2477
|
+
#
|
2478
|
+
# system returns `true` if the command gives zero exit status, `false` for non
|
2479
|
+
# zero exit status. Returns `nil` if command execution fails. An error status is
|
2480
|
+
# available in `$?`.
|
489
2481
|
#
|
490
|
-
#
|
491
|
-
#
|
492
|
-
# [cmdname, argv0], arg1, ... : command name, argv[0] and zero or more arguments (no shell)
|
2482
|
+
# If the `exception: true` argument is passed, the method raises an exception
|
2483
|
+
# instead of returning `false` or `nil`.
|
493
2484
|
#
|
494
|
-
#
|
495
|
-
# non zero exit status. Returns `nil` if command execution fails. An error
|
496
|
-
# status is available in `$?` . The arguments are processed in the same
|
497
|
-
# way as for `Kernel.spawn` .
|
2485
|
+
# The arguments are processed in the same way as for Kernel#spawn.
|
498
2486
|
#
|
499
|
-
# The hash arguments, env and options, are same as
|
500
|
-
#
|
2487
|
+
# The hash arguments, env and options, are same as #exec and #spawn. See
|
2488
|
+
# Kernel#spawn for details.
|
501
2489
|
#
|
502
|
-
#
|
503
|
-
#
|
504
|
-
# system("echo", "*")
|
505
|
-
# ```
|
2490
|
+
# system("echo *")
|
2491
|
+
# system("echo", "*")
|
506
2492
|
#
|
507
2493
|
# *produces:*
|
508
2494
|
#
|
509
2495
|
# config.h main.rb
|
510
2496
|
# *
|
511
2497
|
#
|
512
|
-
#
|
513
|
-
|
514
|
-
|
2498
|
+
# Error handling:
|
2499
|
+
#
|
2500
|
+
# system("cat nonexistent.txt")
|
2501
|
+
# # => false
|
2502
|
+
# system("catt nonexistent.txt")
|
2503
|
+
# # => nil
|
2504
|
+
#
|
2505
|
+
# system("cat nonexistent.txt", exception: true)
|
2506
|
+
# # RuntimeError (Command failed with exit 1: cat)
|
2507
|
+
# system("catt nonexistent.txt", exception: true)
|
2508
|
+
# # Errno::ENOENT (No such file or directory - catt)
|
2509
|
+
#
|
2510
|
+
# See Kernel#exec for the standard shell.
|
2511
|
+
#
|
2512
|
+
def self?.system: (String command, *String args, ?unsetenv_others: boolish, ?pgroup: true | Integer, ?umask: Integer, ?in: redirect_fd, ?out: redirect_fd, ?err: redirect_fd, ?close_others: boolish, ?chdir: String) -> (NilClass | FalseClass | TrueClass)
|
2513
|
+
| (Hash[string, string?] env, String command, *String args, ?unsetenv_others: boolish, ?pgroup: true | Integer, ?umask: Integer, ?in: redirect_fd, ?out: redirect_fd, ?err: redirect_fd, ?close_others: boolish, ?chdir: String) -> (NilClass | FalseClass | TrueClass)
|
515
2514
|
end
|
516
2515
|
|
517
2516
|
Kernel::RUBYGEMS_ACTIVATION_MONITOR: untyped
|