rbs-relaxed 3.9.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.github/dependabot.yml +22 -0
- data/.github/workflows/comments.yml +35 -0
- data/.github/workflows/dependabot.yml +30 -0
- data/.github/workflows/ruby.yml +82 -0
- data/.github/workflows/typecheck.yml +38 -0
- data/.github/workflows/windows.yml +43 -0
- data/.gitignore +23 -0
- data/.rubocop.yml +68 -0
- data/BSDL +22 -0
- data/CHANGELOG.md +1868 -0
- data/COPYING +56 -0
- data/README.md +203 -0
- data/Rakefile +417 -0
- data/Steepfile +44 -0
- data/config.yml +313 -0
- data/core/array.rbs +4062 -0
- data/core/basic_object.rbs +375 -0
- data/core/binding.rbs +150 -0
- data/core/builtin.rbs +277 -0
- data/core/class.rbs +220 -0
- data/core/comparable.rbs +171 -0
- data/core/complex.rbs +786 -0
- data/core/constants.rbs +96 -0
- data/core/data.rbs +415 -0
- data/core/dir.rbs +981 -0
- data/core/encoding.rbs +1371 -0
- data/core/enumerable.rbs +2405 -0
- data/core/enumerator/product.rbs +92 -0
- data/core/enumerator.rbs +630 -0
- data/core/env.rbs +6 -0
- data/core/errno.rbs +673 -0
- data/core/errors.rbs +760 -0
- data/core/exception.rbs +485 -0
- data/core/false_class.rbs +82 -0
- data/core/fiber.rbs +550 -0
- data/core/fiber_error.rbs +11 -0
- data/core/file.rbs +2936 -0
- data/core/file_test.rbs +331 -0
- data/core/float.rbs +1151 -0
- data/core/gc.rbs +644 -0
- data/core/global_variables.rbs +184 -0
- data/core/hash.rbs +1861 -0
- data/core/integer.rbs +1413 -0
- data/core/io/buffer.rbs +984 -0
- data/core/io/wait.rbs +70 -0
- data/core/io.rbs +3406 -0
- data/core/kernel.rbs +3096 -0
- data/core/marshal.rbs +207 -0
- data/core/match_data.rbs +635 -0
- data/core/math.rbs +729 -0
- data/core/method.rbs +386 -0
- data/core/module.rbs +1704 -0
- data/core/nil_class.rbs +209 -0
- data/core/numeric.rbs +818 -0
- data/core/object.rbs +110 -0
- data/core/object_space/weak_key_map.rbs +166 -0
- data/core/object_space.rbs +190 -0
- data/core/proc.rbs +868 -0
- data/core/process.rbs +2296 -0
- data/core/ractor.rbs +1068 -0
- data/core/random.rbs +237 -0
- data/core/range.rbs +1107 -0
- data/core/rational.rbs +531 -0
- data/core/rb_config.rbs +88 -0
- data/core/rbs/unnamed/argf.rbs +1229 -0
- data/core/rbs/unnamed/env_class.rbs +1209 -0
- data/core/rbs/unnamed/random.rbs +293 -0
- data/core/refinement.rbs +59 -0
- data/core/regexp.rbs +1930 -0
- data/core/ruby_vm.rbs +765 -0
- data/core/rubygems/basic_specification.rbs +6 -0
- data/core/rubygems/config_file.rbs +38 -0
- data/core/rubygems/dependency_installer.rbs +6 -0
- data/core/rubygems/errors.rbs +176 -0
- data/core/rubygems/installer.rbs +15 -0
- data/core/rubygems/path_support.rbs +6 -0
- data/core/rubygems/platform.rbs +7 -0
- data/core/rubygems/request_set.rbs +49 -0
- data/core/rubygems/requirement.rbs +148 -0
- data/core/rubygems/rubygems.rbs +1171 -0
- data/core/rubygems/source_list.rbs +15 -0
- data/core/rubygems/specification.rbs +23 -0
- data/core/rubygems/stream_ui.rbs +5 -0
- data/core/rubygems/uninstaller.rbs +10 -0
- data/core/rubygems/version.rbs +294 -0
- data/core/set.rbs +621 -0
- data/core/signal.rbs +100 -0
- data/core/string.rbs +3583 -0
- data/core/struct.rbs +667 -0
- data/core/symbol.rbs +475 -0
- data/core/thread.rbs +1765 -0
- data/core/thread_group.rbs +79 -0
- data/core/time.rbs +1762 -0
- data/core/trace_point.rbs +477 -0
- data/core/true_class.rbs +98 -0
- data/core/unbound_method.rbs +329 -0
- data/core/warning.rbs +87 -0
- data/docs/CONTRIBUTING.md +106 -0
- data/docs/architecture.md +110 -0
- data/docs/collection.md +192 -0
- data/docs/data_and_struct.md +86 -0
- data/docs/gem.md +57 -0
- data/docs/rbs_by_example.md +309 -0
- data/docs/repo.md +125 -0
- data/docs/sigs.md +167 -0
- data/docs/stdlib.md +147 -0
- data/docs/syntax.md +910 -0
- data/docs/tools.md +17 -0
- data/exe/rbs +7 -0
- data/ext/rbs_extension/extconf.rb +15 -0
- data/ext/rbs_extension/lexer.c +2728 -0
- data/ext/rbs_extension/lexer.h +179 -0
- data/ext/rbs_extension/lexer.re +147 -0
- data/ext/rbs_extension/lexstate.c +175 -0
- data/ext/rbs_extension/location.c +325 -0
- data/ext/rbs_extension/location.h +85 -0
- data/ext/rbs_extension/main.c +33 -0
- data/ext/rbs_extension/parser.c +2973 -0
- data/ext/rbs_extension/parser.h +18 -0
- data/ext/rbs_extension/parserstate.c +397 -0
- data/ext/rbs_extension/parserstate.h +163 -0
- data/ext/rbs_extension/rbs_extension.h +31 -0
- data/ext/rbs_extension/unescape.c +32 -0
- data/goodcheck.yml +91 -0
- data/include/rbs/constants.h +82 -0
- data/include/rbs/ruby_objs.h +72 -0
- data/include/rbs/util/rbs_constant_pool.h +219 -0
- data/include/rbs.h +7 -0
- data/lib/rbs/ancestor_graph.rb +92 -0
- data/lib/rbs/annotate/annotations.rb +199 -0
- data/lib/rbs/annotate/formatter.rb +92 -0
- data/lib/rbs/annotate/rdoc_annotator.rb +400 -0
- data/lib/rbs/annotate/rdoc_source.rb +131 -0
- data/lib/rbs/annotate.rb +8 -0
- data/lib/rbs/ast/annotation.rb +29 -0
- data/lib/rbs/ast/comment.rb +29 -0
- data/lib/rbs/ast/declarations.rb +467 -0
- data/lib/rbs/ast/directives.rb +49 -0
- data/lib/rbs/ast/members.rb +451 -0
- data/lib/rbs/ast/type_param.rb +225 -0
- data/lib/rbs/ast/visitor.rb +137 -0
- data/lib/rbs/buffer.rb +67 -0
- data/lib/rbs/builtin_names.rb +58 -0
- data/lib/rbs/cli/colored_io.rb +48 -0
- data/lib/rbs/cli/diff.rb +83 -0
- data/lib/rbs/cli/validate.rb +357 -0
- data/lib/rbs/cli.rb +1223 -0
- data/lib/rbs/collection/cleaner.rb +38 -0
- data/lib/rbs/collection/config/lockfile.rb +92 -0
- data/lib/rbs/collection/config/lockfile_generator.rb +218 -0
- data/lib/rbs/collection/config.rb +81 -0
- data/lib/rbs/collection/installer.rb +32 -0
- data/lib/rbs/collection/sources/base.rb +14 -0
- data/lib/rbs/collection/sources/git.rb +258 -0
- data/lib/rbs/collection/sources/local.rb +81 -0
- data/lib/rbs/collection/sources/rubygems.rb +48 -0
- data/lib/rbs/collection/sources/stdlib.rb +50 -0
- data/lib/rbs/collection/sources.rb +38 -0
- data/lib/rbs/collection.rb +16 -0
- data/lib/rbs/constant.rb +28 -0
- data/lib/rbs/definition.rb +401 -0
- data/lib/rbs/definition_builder/ancestor_builder.rb +620 -0
- data/lib/rbs/definition_builder/method_builder.rb +254 -0
- data/lib/rbs/definition_builder.rb +845 -0
- data/lib/rbs/diff.rb +125 -0
- data/lib/rbs/environment/use_map.rb +77 -0
- data/lib/rbs/environment.rb +829 -0
- data/lib/rbs/environment_loader.rb +173 -0
- data/lib/rbs/environment_walker.rb +155 -0
- data/lib/rbs/errors.rb +645 -0
- data/lib/rbs/factory.rb +18 -0
- data/lib/rbs/file_finder.rb +28 -0
- data/lib/rbs/location_aux.rb +138 -0
- data/lib/rbs/locator.rb +243 -0
- data/lib/rbs/method_type.rb +143 -0
- data/lib/rbs/namespace.rb +125 -0
- data/lib/rbs/parser/lex_result.rb +15 -0
- data/lib/rbs/parser/token.rb +23 -0
- data/lib/rbs/parser_aux.rb +114 -0
- data/lib/rbs/prototype/helpers.rb +140 -0
- data/lib/rbs/prototype/node_usage.rb +99 -0
- data/lib/rbs/prototype/rb.rb +840 -0
- data/lib/rbs/prototype/rbi.rb +641 -0
- data/lib/rbs/prototype/runtime/helpers.rb +59 -0
- data/lib/rbs/prototype/runtime/reflection.rb +19 -0
- data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
- data/lib/rbs/prototype/runtime.rb +667 -0
- data/lib/rbs/repository.rb +127 -0
- data/lib/rbs/resolver/constant_resolver.rb +219 -0
- data/lib/rbs/resolver/type_name_resolver.rb +91 -0
- data/lib/rbs/sorter.rb +198 -0
- data/lib/rbs/substitution.rb +83 -0
- data/lib/rbs/subtractor.rb +201 -0
- data/lib/rbs/test/errors.rb +80 -0
- data/lib/rbs/test/guaranteed.rb +30 -0
- data/lib/rbs/test/hook.rb +212 -0
- data/lib/rbs/test/observer.rb +19 -0
- data/lib/rbs/test/setup.rb +84 -0
- data/lib/rbs/test/setup_helper.rb +50 -0
- data/lib/rbs/test/tester.rb +167 -0
- data/lib/rbs/test/type_check.rb +435 -0
- data/lib/rbs/test.rb +112 -0
- data/lib/rbs/type_alias_dependency.rb +100 -0
- data/lib/rbs/type_alias_regularity.rb +126 -0
- data/lib/rbs/type_name.rb +109 -0
- data/lib/rbs/types.rb +1596 -0
- data/lib/rbs/unit_test/convertibles.rb +176 -0
- data/lib/rbs/unit_test/spy.rb +138 -0
- data/lib/rbs/unit_test/type_assertions.rb +347 -0
- data/lib/rbs/unit_test/with_aliases.rb +143 -0
- data/lib/rbs/unit_test.rb +6 -0
- data/lib/rbs/validator.rb +186 -0
- data/lib/rbs/variance_calculator.rb +189 -0
- data/lib/rbs/vendorer.rb +71 -0
- data/lib/rbs/version.rb +5 -0
- data/lib/rbs/writer.rb +424 -0
- data/lib/rbs.rb +94 -0
- data/lib/rdoc/discover.rb +20 -0
- data/lib/rdoc_plugin/parser.rb +163 -0
- data/rbs-relaxed.gemspec +48 -0
- data/schema/annotation.json +14 -0
- data/schema/comment.json +26 -0
- data/schema/decls.json +326 -0
- data/schema/function.json +87 -0
- data/schema/location.json +56 -0
- data/schema/members.json +266 -0
- data/schema/methodType.json +50 -0
- data/schema/typeParam.json +36 -0
- data/schema/types.json +317 -0
- data/sig/ancestor_builder.rbs +163 -0
- data/sig/ancestor_graph.rbs +60 -0
- 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/annotation.rbs +27 -0
- data/sig/buffer.rbs +32 -0
- data/sig/builtin_names.rbs +44 -0
- data/sig/cli/colored_io.rbs +15 -0
- data/sig/cli/diff.rbs +21 -0
- data/sig/cli/validate.rbs +43 -0
- data/sig/cli.rbs +87 -0
- data/sig/collection/cleaner.rbs +13 -0
- data/sig/collection/config/lockfile.rbs +74 -0
- data/sig/collection/config/lockfile_generator.rbs +66 -0
- data/sig/collection/config.rbs +46 -0
- data/sig/collection/installer.rbs +17 -0
- data/sig/collection/sources.rbs +214 -0
- data/sig/collection.rbs +4 -0
- data/sig/comment.rbs +26 -0
- data/sig/constant.rbs +21 -0
- data/sig/declarations.rbs +267 -0
- data/sig/definition.rbs +173 -0
- data/sig/definition_builder.rbs +165 -0
- data/sig/diff.rbs +28 -0
- data/sig/directives.rbs +77 -0
- data/sig/environment.rbs +279 -0
- data/sig/environment_loader.rbs +111 -0
- data/sig/environment_walker.rbs +65 -0
- data/sig/errors.rbs +405 -0
- data/sig/factory.rbs +5 -0
- data/sig/file_finder.rbs +28 -0
- data/sig/location.rbs +110 -0
- data/sig/locator.rbs +58 -0
- data/sig/manifest.yaml +7 -0
- data/sig/members.rbs +258 -0
- data/sig/method_builder.rbs +84 -0
- data/sig/method_types.rbs +58 -0
- data/sig/namespace.rbs +146 -0
- data/sig/parser.rbs +100 -0
- data/sig/prototype/helpers.rbs +27 -0
- data/sig/prototype/node_usage.rbs +20 -0
- data/sig/prototype/rb.rbs +96 -0
- data/sig/prototype/rbi.rbs +75 -0
- data/sig/prototype/runtime.rbs +182 -0
- data/sig/rbs.rbs +21 -0
- data/sig/rdoc/rbs.rbs +67 -0
- data/sig/repository.rbs +85 -0
- data/sig/resolver/constant_resolver.rbs +92 -0
- data/sig/resolver/context.rbs +34 -0
- data/sig/resolver/type_name_resolver.rbs +35 -0
- data/sig/shims/bundler.rbs +38 -0
- data/sig/shims/enumerable.rbs +5 -0
- data/sig/shims/rubygems.rbs +19 -0
- data/sig/sorter.rbs +41 -0
- data/sig/substitution.rbs +48 -0
- data/sig/subtractor.rbs +37 -0
- data/sig/test/errors.rbs +52 -0
- data/sig/test/guranteed.rbs +9 -0
- data/sig/test/type_check.rbs +19 -0
- data/sig/test.rbs +82 -0
- data/sig/type_alias_dependency.rbs +53 -0
- data/sig/type_alias_regularity.rbs +98 -0
- data/sig/type_param.rbs +110 -0
- data/sig/typename.rbs +79 -0
- data/sig/types.rbs +579 -0
- data/sig/unit_test/convertibles.rbs +154 -0
- data/sig/unit_test/spy.rbs +30 -0
- data/sig/unit_test/type_assertions.rbs +196 -0
- data/sig/unit_test/with_aliases.rbs +136 -0
- data/sig/use_map.rbs +35 -0
- data/sig/util.rbs +9 -0
- data/sig/validator.rbs +63 -0
- data/sig/variance_calculator.rbs +87 -0
- data/sig/vendorer.rbs +51 -0
- data/sig/version.rbs +3 -0
- data/sig/visitor.rbs +47 -0
- data/sig/writer.rbs +127 -0
- data/src/constants.c +153 -0
- data/src/ruby_objs.c +795 -0
- data/src/util/rbs_constant_pool.c +342 -0
- data/stdlib/abbrev/0/abbrev.rbs +66 -0
- data/stdlib/abbrev/0/array.rbs +26 -0
- data/stdlib/base64/0/base64.rbs +355 -0
- data/stdlib/benchmark/0/benchmark.rbs +452 -0
- data/stdlib/bigdecimal/0/big_decimal.rbs +1629 -0
- data/stdlib/bigdecimal-math/0/big_math.rbs +119 -0
- data/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
- data/stdlib/cgi/0/core.rbs +1285 -0
- data/stdlib/cgi/0/manifest.yaml +3 -0
- data/stdlib/coverage/0/coverage.rbs +263 -0
- data/stdlib/csv/0/csv.rbs +3776 -0
- data/stdlib/csv/0/manifest.yaml +3 -0
- data/stdlib/date/0/date.rbs +1585 -0
- data/stdlib/date/0/date_time.rbs +616 -0
- data/stdlib/date/0/time.rbs +26 -0
- data/stdlib/dbm/0/dbm.rbs +421 -0
- data/stdlib/delegate/0/delegator.rbs +184 -0
- data/stdlib/delegate/0/kernel.rbs +47 -0
- data/stdlib/delegate/0/simple_delegator.rbs +96 -0
- data/stdlib/did_you_mean/0/did_you_mean.rbs +343 -0
- data/stdlib/digest/0/digest.rbs +577 -0
- data/stdlib/erb/0/erb.rbs +532 -0
- data/stdlib/etc/0/etc.rbs +865 -0
- data/stdlib/fileutils/0/fileutils.rbs +1734 -0
- data/stdlib/find/0/find.rbs +49 -0
- data/stdlib/forwardable/0/forwardable.rbs +268 -0
- data/stdlib/io-console/0/io-console.rbs +414 -0
- data/stdlib/ipaddr/0/ipaddr.rbs +428 -0
- data/stdlib/json/0/json.rbs +1916 -0
- data/stdlib/kconv/0/kconv.rbs +166 -0
- data/stdlib/logger/0/formatter.rbs +45 -0
- data/stdlib/logger/0/log_device.rbs +100 -0
- data/stdlib/logger/0/logger.rbs +796 -0
- data/stdlib/logger/0/manifest.yaml +2 -0
- data/stdlib/logger/0/period.rbs +17 -0
- data/stdlib/logger/0/severity.rbs +34 -0
- data/stdlib/minitest/0/kernel.rbs +42 -0
- data/stdlib/minitest/0/minitest/abstract_reporter.rbs +52 -0
- data/stdlib/minitest/0/minitest/assertion.rbs +17 -0
- data/stdlib/minitest/0/minitest/assertions.rbs +590 -0
- data/stdlib/minitest/0/minitest/backtrace_filter.rbs +23 -0
- data/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
- data/stdlib/minitest/0/minitest/benchmark.rbs +259 -0
- data/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
- data/stdlib/minitest/0/minitest/compress.rbs +13 -0
- data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
- data/stdlib/minitest/0/minitest/expectation.rbs +2 -0
- data/stdlib/minitest/0/minitest/expectations.rbs +21 -0
- data/stdlib/minitest/0/minitest/guard.rbs +64 -0
- data/stdlib/minitest/0/minitest/mock.rbs +64 -0
- data/stdlib/minitest/0/minitest/parallel/executor.rbs +46 -0
- data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +5 -0
- data/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
- data/stdlib/minitest/0/minitest/parallel.rbs +2 -0
- data/stdlib/minitest/0/minitest/pride_io.rbs +62 -0
- data/stdlib/minitest/0/minitest/pride_lol.rbs +19 -0
- data/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
- data/stdlib/minitest/0/minitest/reportable.rbs +53 -0
- data/stdlib/minitest/0/minitest/reporter.rbs +5 -0
- data/stdlib/minitest/0/minitest/result.rbs +28 -0
- data/stdlib/minitest/0/minitest/runnable.rbs +163 -0
- data/stdlib/minitest/0/minitest/skip.rbs +6 -0
- data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
- data/stdlib/minitest/0/minitest/spec/dsl.rbs +129 -0
- data/stdlib/minitest/0/minitest/spec.rbs +11 -0
- data/stdlib/minitest/0/minitest/statistics_reporter.rbs +81 -0
- data/stdlib/minitest/0/minitest/summary_reporter.rbs +18 -0
- data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
- data/stdlib/minitest/0/minitest/test.rbs +69 -0
- data/stdlib/minitest/0/minitest/unexpected_error.rbs +12 -0
- data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
- data/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
- data/stdlib/minitest/0/minitest/unit.rbs +4 -0
- data/stdlib/minitest/0/minitest.rbs +115 -0
- data/stdlib/monitor/0/monitor.rbs +363 -0
- data/stdlib/mutex_m/0/mutex_m.rbs +104 -0
- data/stdlib/net-http/0/manifest.yaml +3 -0
- data/stdlib/net-http/0/net-http.rbs +5552 -0
- data/stdlib/net-protocol/0/manifest.yaml +2 -0
- data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
- data/stdlib/net-smtp/0/manifest.yaml +2 -0
- data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
- data/stdlib/nkf/0/nkf.rbs +402 -0
- data/stdlib/objspace/0/objspace.rbs +487 -0
- data/stdlib/observable/0/observable.rbs +217 -0
- data/stdlib/open-uri/0/manifest.yaml +4 -0
- data/stdlib/open-uri/0/open-uri.rbs +393 -0
- data/stdlib/open3/0/open3.rbs +147 -0
- data/stdlib/openssl/0/manifest.yaml +3 -0
- data/stdlib/openssl/0/openssl.rbs +12113 -0
- data/stdlib/optparse/0/optparse.rbs +1725 -0
- data/stdlib/pathname/0/pathname.rbs +1406 -0
- data/stdlib/pp/0/manifest.yaml +2 -0
- data/stdlib/pp/0/pp.rbs +300 -0
- data/stdlib/prettyprint/0/prettyprint.rbs +383 -0
- data/stdlib/pstore/0/pstore.rbs +603 -0
- data/stdlib/psych/0/core_ext.rbs +12 -0
- data/stdlib/psych/0/dbm.rbs +237 -0
- data/stdlib/psych/0/manifest.yaml +3 -0
- data/stdlib/psych/0/psych.rbs +402 -0
- data/stdlib/psych/0/store.rbs +59 -0
- data/stdlib/pty/0/pty.rbs +237 -0
- data/stdlib/rdoc/0/code_object.rbs +51 -0
- data/stdlib/rdoc/0/comment.rbs +59 -0
- data/stdlib/rdoc/0/context.rbs +153 -0
- data/stdlib/rdoc/0/markup.rbs +117 -0
- data/stdlib/rdoc/0/parser.rbs +56 -0
- data/stdlib/rdoc/0/rdoc.rbs +391 -0
- data/stdlib/rdoc/0/ri.rbs +17 -0
- data/stdlib/rdoc/0/store.rbs +48 -0
- data/stdlib/rdoc/0/top_level.rbs +97 -0
- data/stdlib/resolv/0/manifest.yaml +3 -0
- data/stdlib/resolv/0/resolv.rbs +1830 -0
- data/stdlib/ripper/0/ripper.rbs +1648 -0
- data/stdlib/securerandom/0/securerandom.rbs +62 -0
- data/stdlib/shellwords/0/shellwords.rbs +229 -0
- data/stdlib/singleton/0/singleton.rbs +131 -0
- data/stdlib/socket/0/addrinfo.rbs +666 -0
- data/stdlib/socket/0/basic_socket.rbs +590 -0
- data/stdlib/socket/0/constants.rbs +2295 -0
- data/stdlib/socket/0/ip_socket.rbs +92 -0
- data/stdlib/socket/0/socket.rbs +4157 -0
- data/stdlib/socket/0/socket_error.rbs +5 -0
- data/stdlib/socket/0/tcp_server.rbs +192 -0
- data/stdlib/socket/0/tcp_socket.rbs +79 -0
- data/stdlib/socket/0/udp_socket.rbs +133 -0
- data/stdlib/socket/0/unix_server.rbs +169 -0
- data/stdlib/socket/0/unix_socket.rbs +172 -0
- data/stdlib/stringio/0/stringio.rbs +567 -0
- data/stdlib/strscan/0/string_scanner.rbs +1627 -0
- data/stdlib/tempfile/0/tempfile.rbs +479 -0
- data/stdlib/time/0/time.rbs +432 -0
- data/stdlib/timeout/0/timeout.rbs +81 -0
- data/stdlib/tmpdir/0/tmpdir.rbs +69 -0
- data/stdlib/tsort/0/cyclic.rbs +5 -0
- data/stdlib/tsort/0/interfaces.rbs +20 -0
- data/stdlib/tsort/0/tsort.rbs +409 -0
- data/stdlib/uri/0/common.rbs +582 -0
- data/stdlib/uri/0/file.rbs +118 -0
- data/stdlib/uri/0/ftp.rbs +13 -0
- data/stdlib/uri/0/generic.rbs +1108 -0
- data/stdlib/uri/0/http.rbs +104 -0
- data/stdlib/uri/0/https.rbs +14 -0
- data/stdlib/uri/0/ldap.rbs +230 -0
- data/stdlib/uri/0/ldaps.rbs +14 -0
- data/stdlib/uri/0/mailto.rbs +92 -0
- data/stdlib/uri/0/rfc2396_parser.rbs +189 -0
- data/stdlib/uri/0/rfc3986_parser.rbs +2 -0
- data/stdlib/uri/0/ws.rbs +13 -0
- data/stdlib/uri/0/wss.rbs +9 -0
- data/stdlib/yaml/0/manifest.yaml +2 -0
- data/stdlib/yaml/0/yaml.rbs +1 -0
- data/stdlib/zlib/0/buf_error.rbs +10 -0
- data/stdlib/zlib/0/data_error.rbs +10 -0
- data/stdlib/zlib/0/deflate.rbs +210 -0
- data/stdlib/zlib/0/error.rbs +20 -0
- data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
- data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
- data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
- data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
- data/stdlib/zlib/0/gzip_file.rbs +156 -0
- data/stdlib/zlib/0/gzip_reader.rbs +293 -0
- data/stdlib/zlib/0/gzip_writer.rbs +166 -0
- data/stdlib/zlib/0/inflate.rbs +180 -0
- data/stdlib/zlib/0/mem_error.rbs +10 -0
- data/stdlib/zlib/0/need_dict.rbs +13 -0
- data/stdlib/zlib/0/stream_end.rbs +11 -0
- data/stdlib/zlib/0/stream_error.rbs +11 -0
- data/stdlib/zlib/0/version_error.rbs +11 -0
- data/stdlib/zlib/0/zlib.rbs +449 -0
- data/stdlib/zlib/0/zstream.rbs +200 -0
- metadata +532 -0
data/core/proc.rbs
ADDED
@@ -0,0 +1,868 @@
|
|
1
|
+
# <!-- rdoc-file=proc.c -->
|
2
|
+
# A `Proc` object is an encapsulation of a block of code, which can be stored in
|
3
|
+
# a local variable, passed to a method or another Proc, and can be called. Proc
|
4
|
+
# is an essential concept in Ruby and a core of its functional programming
|
5
|
+
# features.
|
6
|
+
#
|
7
|
+
# square = Proc.new {|x| x**2 }
|
8
|
+
#
|
9
|
+
# square.call(3) #=> 9
|
10
|
+
# # shorthands:
|
11
|
+
# square.(3) #=> 9
|
12
|
+
# square[3] #=> 9
|
13
|
+
#
|
14
|
+
# Proc objects are *closures*, meaning they remember and can use the entire
|
15
|
+
# context in which they were created.
|
16
|
+
#
|
17
|
+
# def gen_times(factor)
|
18
|
+
# Proc.new {|n| n*factor } # remembers the value of factor at the moment of creation
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
# times3 = gen_times(3)
|
22
|
+
# times5 = gen_times(5)
|
23
|
+
#
|
24
|
+
# times3.call(12) #=> 36
|
25
|
+
# times5.call(5) #=> 25
|
26
|
+
# times3.call(times5.call(4)) #=> 60
|
27
|
+
#
|
28
|
+
# ## Creation
|
29
|
+
#
|
30
|
+
# There are several methods to create a Proc
|
31
|
+
#
|
32
|
+
# * Use the Proc class constructor:
|
33
|
+
#
|
34
|
+
# proc1 = Proc.new {|x| x**2 }
|
35
|
+
#
|
36
|
+
# * Use the Kernel#proc method as a shorthand of Proc.new:
|
37
|
+
#
|
38
|
+
# proc2 = proc {|x| x**2 }
|
39
|
+
#
|
40
|
+
# * Receiving a block of code into proc argument (note the `&`):
|
41
|
+
#
|
42
|
+
# def make_proc(&block)
|
43
|
+
# block
|
44
|
+
# end
|
45
|
+
#
|
46
|
+
# proc3 = make_proc {|x| x**2 }
|
47
|
+
#
|
48
|
+
# * Construct a proc with lambda semantics using the Kernel#lambda method (see
|
49
|
+
# below for explanations about lambdas):
|
50
|
+
#
|
51
|
+
# lambda1 = lambda {|x| x**2 }
|
52
|
+
#
|
53
|
+
# * Use the [Lambda proc
|
54
|
+
# literal](rdoc-ref:syntax/literals.rdoc@Lambda+Proc+Literals) syntax (also
|
55
|
+
# constructs a proc with lambda semantics):
|
56
|
+
#
|
57
|
+
# lambda2 = ->(x) { x**2 }
|
58
|
+
#
|
59
|
+
# ## Lambda and non-lambda semantics
|
60
|
+
#
|
61
|
+
# Procs are coming in two flavors: lambda and non-lambda (regular procs).
|
62
|
+
# Differences are:
|
63
|
+
#
|
64
|
+
# * In lambdas, `return` and `break` means exit from this lambda;
|
65
|
+
# * In non-lambda procs, `return` means exit from embracing method (and will
|
66
|
+
# throw `LocalJumpError` if invoked outside the method);
|
67
|
+
# * In non-lambda procs, `break` means exit from the method which the block
|
68
|
+
# given for. (and will throw `LocalJumpError` if invoked after the method
|
69
|
+
# returns);
|
70
|
+
# * In lambdas, arguments are treated in the same way as in methods: strict,
|
71
|
+
# with `ArgumentError` for mismatching argument number, and no additional
|
72
|
+
# argument processing;
|
73
|
+
# * Regular procs accept arguments more generously: missing arguments are
|
74
|
+
# filled with `nil`, single Array arguments are deconstructed if the proc
|
75
|
+
# has multiple arguments, and there is no error raised on extra arguments.
|
76
|
+
#
|
77
|
+
# Examples:
|
78
|
+
#
|
79
|
+
# # +return+ in non-lambda proc, +b+, exits +m2+.
|
80
|
+
# # (The block +{ return }+ is given for +m1+ and embraced by +m2+.)
|
81
|
+
# $a = []; def m1(&b) b.call; $a << :m1 end; def m2() m1 { return }; $a << :m2 end; m2; p $a
|
82
|
+
# #=> []
|
83
|
+
#
|
84
|
+
# # +break+ in non-lambda proc, +b+, exits +m1+.
|
85
|
+
# # (The block +{ break }+ is given for +m1+ and embraced by +m2+.)
|
86
|
+
# $a = []; def m1(&b) b.call; $a << :m1 end; def m2() m1 { break }; $a << :m2 end; m2; p $a
|
87
|
+
# #=> [:m2]
|
88
|
+
#
|
89
|
+
# # +next+ in non-lambda proc, +b+, exits the block.
|
90
|
+
# # (The block +{ next }+ is given for +m1+ and embraced by +m2+.)
|
91
|
+
# $a = []; def m1(&b) b.call; $a << :m1 end; def m2() m1 { next }; $a << :m2 end; m2; p $a
|
92
|
+
# #=> [:m1, :m2]
|
93
|
+
#
|
94
|
+
# # Using +proc+ method changes the behavior as follows because
|
95
|
+
# # The block is given for +proc+ method and embraced by +m2+.
|
96
|
+
# $a = []; def m1(&b) b.call; $a << :m1 end; def m2() m1(&proc { return }); $a << :m2 end; m2; p $a
|
97
|
+
# #=> []
|
98
|
+
# $a = []; def m1(&b) b.call; $a << :m1 end; def m2() m1(&proc { break }); $a << :m2 end; m2; p $a
|
99
|
+
# # break from proc-closure (LocalJumpError)
|
100
|
+
# $a = []; def m1(&b) b.call; $a << :m1 end; def m2() m1(&proc { next }); $a << :m2 end; m2; p $a
|
101
|
+
# #=> [:m1, :m2]
|
102
|
+
#
|
103
|
+
# # +return+, +break+ and +next+ in the stubby lambda exits the block.
|
104
|
+
# # (+lambda+ method behaves same.)
|
105
|
+
# # (The block is given for stubby lambda syntax and embraced by +m2+.)
|
106
|
+
# $a = []; def m1(&b) b.call; $a << :m1 end; def m2() m1(&-> { return }); $a << :m2 end; m2; p $a
|
107
|
+
# #=> [:m1, :m2]
|
108
|
+
# $a = []; def m1(&b) b.call; $a << :m1 end; def m2() m1(&-> { break }); $a << :m2 end; m2; p $a
|
109
|
+
# #=> [:m1, :m2]
|
110
|
+
# $a = []; def m1(&b) b.call; $a << :m1 end; def m2() m1(&-> { next }); $a << :m2 end; m2; p $a
|
111
|
+
# #=> [:m1, :m2]
|
112
|
+
#
|
113
|
+
# p = proc {|x, y| "x=#{x}, y=#{y}" }
|
114
|
+
# p.call(1, 2) #=> "x=1, y=2"
|
115
|
+
# p.call([1, 2]) #=> "x=1, y=2", array deconstructed
|
116
|
+
# p.call(1, 2, 8) #=> "x=1, y=2", extra argument discarded
|
117
|
+
# p.call(1) #=> "x=1, y=", nil substituted instead of error
|
118
|
+
#
|
119
|
+
# l = lambda {|x, y| "x=#{x}, y=#{y}" }
|
120
|
+
# l.call(1, 2) #=> "x=1, y=2"
|
121
|
+
# l.call([1, 2]) # ArgumentError: wrong number of arguments (given 1, expected 2)
|
122
|
+
# l.call(1, 2, 8) # ArgumentError: wrong number of arguments (given 3, expected 2)
|
123
|
+
# l.call(1) # ArgumentError: wrong number of arguments (given 1, expected 2)
|
124
|
+
#
|
125
|
+
# def test_return
|
126
|
+
# -> { return 3 }.call # just returns from lambda into method body
|
127
|
+
# proc { return 4 }.call # returns from method
|
128
|
+
# return 5
|
129
|
+
# end
|
130
|
+
#
|
131
|
+
# test_return # => 4, return from proc
|
132
|
+
#
|
133
|
+
# Lambdas are useful as self-sufficient functions, in particular useful as
|
134
|
+
# arguments to higher-order functions, behaving exactly like Ruby methods.
|
135
|
+
#
|
136
|
+
# Procs are useful for implementing iterators:
|
137
|
+
#
|
138
|
+
# def test
|
139
|
+
# [[1, 2], [3, 4], [5, 6]].map {|a, b| return a if a + b > 10 }
|
140
|
+
# # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
141
|
+
# end
|
142
|
+
#
|
143
|
+
# Inside `map`, the block of code is treated as a regular (non-lambda) proc,
|
144
|
+
# which means that the internal arrays will be deconstructed to pairs of
|
145
|
+
# arguments, and `return` will exit from the method `test`. That would not be
|
146
|
+
# possible with a stricter lambda.
|
147
|
+
#
|
148
|
+
# You can tell a lambda from a regular proc by using the #lambda? instance
|
149
|
+
# method.
|
150
|
+
#
|
151
|
+
# Lambda semantics is typically preserved during the proc lifetime, including
|
152
|
+
# `&`-deconstruction to a block of code:
|
153
|
+
#
|
154
|
+
# p = proc {|x, y| x }
|
155
|
+
# l = lambda {|x, y| x }
|
156
|
+
# [[1, 2], [3, 4]].map(&p) #=> [1, 3]
|
157
|
+
# [[1, 2], [3, 4]].map(&l) # ArgumentError: wrong number of arguments (given 1, expected 2)
|
158
|
+
#
|
159
|
+
# The only exception is dynamic method definition: even if defined by passing a
|
160
|
+
# non-lambda proc, methods still have normal semantics of argument checking.
|
161
|
+
#
|
162
|
+
# class C
|
163
|
+
# define_method(:e, &proc {})
|
164
|
+
# end
|
165
|
+
# C.new.e(1,2) #=> ArgumentError
|
166
|
+
# C.new.method(:e).to_proc.lambda? #=> true
|
167
|
+
#
|
168
|
+
# This exception ensures that methods never have unusual argument passing
|
169
|
+
# conventions, and makes it easy to have wrappers defining methods that behave
|
170
|
+
# as usual.
|
171
|
+
#
|
172
|
+
# class C
|
173
|
+
# def self.def2(name, &body)
|
174
|
+
# define_method(name, &body)
|
175
|
+
# end
|
176
|
+
#
|
177
|
+
# def2(:f) {}
|
178
|
+
# end
|
179
|
+
# C.new.f(1,2) #=> ArgumentError
|
180
|
+
#
|
181
|
+
# The wrapper `def2` receives *body* as a non-lambda proc, yet defines a method
|
182
|
+
# which has normal semantics.
|
183
|
+
#
|
184
|
+
# ## Conversion of other objects to procs
|
185
|
+
#
|
186
|
+
# Any object that implements the `to_proc` method can be converted into a proc
|
187
|
+
# by the `&` operator, and therefore can be consumed by iterators.
|
188
|
+
#
|
189
|
+
# class Greeter
|
190
|
+
# def initialize(greeting)
|
191
|
+
# @greeting = greeting
|
192
|
+
# end
|
193
|
+
#
|
194
|
+
# def to_proc
|
195
|
+
# proc {|name| "#{@greeting}, #{name}!" }
|
196
|
+
# end
|
197
|
+
# end
|
198
|
+
#
|
199
|
+
# hi = Greeter.new("Hi")
|
200
|
+
# hey = Greeter.new("Hey")
|
201
|
+
# ["Bob", "Jane"].map(&hi) #=> ["Hi, Bob!", "Hi, Jane!"]
|
202
|
+
# ["Bob", "Jane"].map(&hey) #=> ["Hey, Bob!", "Hey, Jane!"]
|
203
|
+
#
|
204
|
+
# Of the Ruby core classes, this method is implemented by Symbol, Method, and
|
205
|
+
# Hash.
|
206
|
+
#
|
207
|
+
# :to_s.to_proc.call(1) #=> "1"
|
208
|
+
# [1, 2].map(&:to_s) #=> ["1", "2"]
|
209
|
+
#
|
210
|
+
# method(:puts).to_proc.call(1) # prints 1
|
211
|
+
# [1, 2].each(&method(:puts)) # prints 1, 2
|
212
|
+
#
|
213
|
+
# {test: 1}.to_proc.call(:test) #=> 1
|
214
|
+
# %i[test many keys].map(&{test: 1}) #=> [1, nil, nil]
|
215
|
+
#
|
216
|
+
# ## Orphaned Proc
|
217
|
+
#
|
218
|
+
# `return` and `break` in a block exit a method. If a Proc object is generated
|
219
|
+
# from the block and the Proc object survives until the method is returned,
|
220
|
+
# `return` and `break` cannot work. In such case, `return` and `break` raises
|
221
|
+
# LocalJumpError. A Proc object in such situation is called as orphaned Proc
|
222
|
+
# object.
|
223
|
+
#
|
224
|
+
# Note that the method to exit is different for `return` and `break`. There is a
|
225
|
+
# situation that orphaned for `break` but not orphaned for `return`.
|
226
|
+
#
|
227
|
+
# def m1(&b) b.call end; def m2(); m1 { return } end; m2 # ok
|
228
|
+
# def m1(&b) b.call end; def m2(); m1 { break } end; m2 # ok
|
229
|
+
#
|
230
|
+
# def m1(&b) b end; def m2(); m1 { return }.call end; m2 # ok
|
231
|
+
# def m1(&b) b end; def m2(); m1 { break }.call end; m2 # LocalJumpError
|
232
|
+
#
|
233
|
+
# def m1(&b) b end; def m2(); m1 { return } end; m2.call # LocalJumpError
|
234
|
+
# def m1(&b) b end; def m2(); m1 { break } end; m2.call # LocalJumpError
|
235
|
+
#
|
236
|
+
# Since `return` and `break` exits the block itself in lambdas, lambdas cannot
|
237
|
+
# be orphaned.
|
238
|
+
#
|
239
|
+
# ## Anonymous block parameters
|
240
|
+
#
|
241
|
+
# To simplify writing short blocks, Ruby provides two different types of
|
242
|
+
# anonymous parameters: `it` (single parameter) and numbered ones: `_1`, `_2`
|
243
|
+
# and so on.
|
244
|
+
#
|
245
|
+
# # Explicit parameter:
|
246
|
+
# %w[test me please].each { |str| puts str.upcase } # prints TEST, ME, PLEASE
|
247
|
+
# (1..5).map { |i| i**2 } # => [1, 4, 9, 16, 25]
|
248
|
+
#
|
249
|
+
# # it:
|
250
|
+
# %w[test me please].each { puts it.upcase } # prints TEST, ME, PLEASE
|
251
|
+
# (1..5).map { it**2 } # => [1, 4, 9, 16, 25]
|
252
|
+
#
|
253
|
+
# # Numbered parameter:
|
254
|
+
# %w[test me please].each { puts _1.upcase } # prints TEST, ME, PLEASE
|
255
|
+
# (1..5).map { _1**2 } # => [1, 4, 9, 16, 25]
|
256
|
+
#
|
257
|
+
# ### `it`
|
258
|
+
#
|
259
|
+
# `it` is a name that is available inside a block when no explicit parameters
|
260
|
+
# defined, as shown above.
|
261
|
+
#
|
262
|
+
# %w[test me please].each { puts it.upcase } # prints TEST, ME, PLEASE
|
263
|
+
# (1..5).map { it**2 } # => [1, 4, 9, 16, 25]
|
264
|
+
#
|
265
|
+
# `it` is a "soft keyword": it is not a reserved name, and can be used as a name
|
266
|
+
# for methods and local variables:
|
267
|
+
#
|
268
|
+
# it = 5 # no warnings
|
269
|
+
# def it(&block) # RSpec-like API, no warnings
|
270
|
+
# # ...
|
271
|
+
# end
|
272
|
+
#
|
273
|
+
# `it` can be used as a local variable even in blocks that use it as an implicit
|
274
|
+
# parameter (though this style is obviously confusing):
|
275
|
+
#
|
276
|
+
# [1, 2, 3].each {
|
277
|
+
# # takes a value of implicit parameter "it" and uses it to
|
278
|
+
# # define a local variable with the same name
|
279
|
+
# it = it**2
|
280
|
+
# p it
|
281
|
+
# }
|
282
|
+
#
|
283
|
+
# In a block with explicit parameters defined `it` usage raises an exception:
|
284
|
+
#
|
285
|
+
# [1, 2, 3].each { |x| p it }
|
286
|
+
# # syntax error found (SyntaxError)
|
287
|
+
# # [1, 2, 3].each { |x| p it }
|
288
|
+
# # ^~ `it` is not allowed when an ordinary parameter is defined
|
289
|
+
#
|
290
|
+
# But if a local name (variable or method) is available, it would be used:
|
291
|
+
#
|
292
|
+
# it = 5
|
293
|
+
# [1, 2, 3].each { |x| p it }
|
294
|
+
# # Prints 5, 5, 5
|
295
|
+
#
|
296
|
+
# Blocks using `it` can be nested:
|
297
|
+
#
|
298
|
+
# %w[test me].each { it.each_char { p it } }
|
299
|
+
# # Prints "t", "e", "s", "t", "m", "e"
|
300
|
+
#
|
301
|
+
# Blocks using `it` are considered to have one parameter:
|
302
|
+
#
|
303
|
+
# p = proc { it**2 }
|
304
|
+
# l = lambda { it**2 }
|
305
|
+
# p.parameters # => [[:opt, nil]]
|
306
|
+
# p.arity # => 1
|
307
|
+
# l.parameters # => [[:req]]
|
308
|
+
# l.arity # => 1
|
309
|
+
#
|
310
|
+
# ### Numbered parameters
|
311
|
+
#
|
312
|
+
# Numbered parameters are another way to name block parameters implicitly.
|
313
|
+
# Unlike `it`, numbered parameters allow to refer to several parameters in one
|
314
|
+
# block.
|
315
|
+
#
|
316
|
+
# %w[test me please].each { puts _1.upcase } # prints TEST, ME, PLEASE
|
317
|
+
# {a: 100, b: 200}.map { "#{_1} = #{_2}" } # => "a = 100", "b = 200"
|
318
|
+
#
|
319
|
+
# Parameter names from `_1` to `_9` are supported:
|
320
|
+
#
|
321
|
+
# [10, 20, 30].zip([40, 50, 60], [70, 80, 90]).map { _1 + _2 + _3 }
|
322
|
+
# # => [120, 150, 180]
|
323
|
+
#
|
324
|
+
# Though, it is advised to resort to them wisely, probably limiting yourself to
|
325
|
+
# `_1` and `_2`, and to one-line blocks.
|
326
|
+
#
|
327
|
+
# Numbered parameters can't be used together with explicitly named ones:
|
328
|
+
#
|
329
|
+
# [10, 20, 30].map { |x| _1**2 }
|
330
|
+
# # SyntaxError (ordinary parameter is defined)
|
331
|
+
#
|
332
|
+
# Numbered parameters can't be mixed with `it` either:
|
333
|
+
#
|
334
|
+
# [10, 20, 30].map { _1 + it }
|
335
|
+
# # SyntaxError: `it` is not allowed when a numbered parameter is already used
|
336
|
+
#
|
337
|
+
# To avoid conflicts, naming local variables or method arguments `_1`, `_2` and
|
338
|
+
# so on, causes an error.
|
339
|
+
#
|
340
|
+
# _1 = 'test'
|
341
|
+
# # ^~ _1 is reserved for numbered parameters (SyntaxError)
|
342
|
+
#
|
343
|
+
# Using implicit numbered parameters affects block's arity:
|
344
|
+
#
|
345
|
+
# p = proc { _1 + _2 }
|
346
|
+
# l = lambda { _1 + _2 }
|
347
|
+
# p.parameters # => [[:opt, :_1], [:opt, :_2]]
|
348
|
+
# p.arity # => 2
|
349
|
+
# l.parameters # => [[:req, :_1], [:req, :_2]]
|
350
|
+
# l.arity # => 2
|
351
|
+
#
|
352
|
+
# Blocks with numbered parameters can't be nested:
|
353
|
+
#
|
354
|
+
# %w[test me].each { _1.each_char { p _1 } }
|
355
|
+
# # numbered parameter is already used in outer block (SyntaxError)
|
356
|
+
# # %w[test me].each { _1.each_char { p _1 } }
|
357
|
+
# # ^~
|
358
|
+
#
|
359
|
+
class Proc
|
360
|
+
interface _Callable
|
361
|
+
def call: (?) -> untyped
|
362
|
+
end
|
363
|
+
|
364
|
+
# <!--
|
365
|
+
# rdoc-file=proc.c
|
366
|
+
# - Proc.new {|...| block } -> a_proc
|
367
|
+
# -->
|
368
|
+
# Creates a new Proc object, bound to the current context.
|
369
|
+
#
|
370
|
+
# proc = Proc.new { "hello" }
|
371
|
+
# proc.call #=> "hello"
|
372
|
+
#
|
373
|
+
# Raises ArgumentError if called without a block.
|
374
|
+
#
|
375
|
+
# Proc.new #=> ArgumentError
|
376
|
+
#
|
377
|
+
def self.new: () { (?) -> untyped } -> instance
|
378
|
+
|
379
|
+
def clone: () -> instance
|
380
|
+
def dup: () -> instance
|
381
|
+
|
382
|
+
# <!-- rdoc-file=proc.c -->
|
383
|
+
# Invokes the block, setting the block's parameters to the values in *params*
|
384
|
+
# using something close to method calling semantics. Returns the value of the
|
385
|
+
# last expression evaluated in the block.
|
386
|
+
#
|
387
|
+
# a_proc = Proc.new {|scalar, *values| values.map {|value| value*scalar } }
|
388
|
+
# a_proc.call(9, 1, 2, 3) #=> [9, 18, 27]
|
389
|
+
# a_proc[9, 1, 2, 3] #=> [9, 18, 27]
|
390
|
+
# a_proc.(9, 1, 2, 3) #=> [9, 18, 27]
|
391
|
+
# a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]
|
392
|
+
#
|
393
|
+
# Note that `prc.()` invokes `prc.call()` with the parameters given. It's
|
394
|
+
# syntactic sugar to hide "call".
|
395
|
+
#
|
396
|
+
# For procs created using #lambda or `->()` an error is generated if the wrong
|
397
|
+
# number of parameters are passed to the proc. For procs created using Proc.new
|
398
|
+
# or Kernel.proc, extra parameters are silently discarded and missing parameters
|
399
|
+
# are set to `nil`.
|
400
|
+
#
|
401
|
+
# a_proc = proc {|a,b| [a,b] }
|
402
|
+
# a_proc.call(1) #=> [1, nil]
|
403
|
+
#
|
404
|
+
# a_proc = lambda {|a,b| [a,b] }
|
405
|
+
# a_proc.call(1) # ArgumentError: wrong number of arguments (given 1, expected 2)
|
406
|
+
#
|
407
|
+
# See also Proc#lambda?.
|
408
|
+
#
|
409
|
+
alias === call
|
410
|
+
|
411
|
+
# <!-- rdoc-file=proc.c -->
|
412
|
+
# Invokes the block, setting the block's parameters to the values in *params*
|
413
|
+
# using something close to method calling semantics. Returns the value of the
|
414
|
+
# last expression evaluated in the block.
|
415
|
+
#
|
416
|
+
# a_proc = Proc.new {|scalar, *values| values.map {|value| value*scalar } }
|
417
|
+
# a_proc.call(9, 1, 2, 3) #=> [9, 18, 27]
|
418
|
+
# a_proc[9, 1, 2, 3] #=> [9, 18, 27]
|
419
|
+
# a_proc.(9, 1, 2, 3) #=> [9, 18, 27]
|
420
|
+
# a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]
|
421
|
+
#
|
422
|
+
# Note that `prc.()` invokes `prc.call()` with the parameters given. It's
|
423
|
+
# syntactic sugar to hide "call".
|
424
|
+
#
|
425
|
+
# For procs created using #lambda or `->()` an error is generated if the wrong
|
426
|
+
# number of parameters are passed to the proc. For procs created using Proc.new
|
427
|
+
# or Kernel.proc, extra parameters are silently discarded and missing parameters
|
428
|
+
# are set to `nil`.
|
429
|
+
#
|
430
|
+
# a_proc = proc {|a,b| [a,b] }
|
431
|
+
# a_proc.call(1) #=> [1, nil]
|
432
|
+
#
|
433
|
+
# a_proc = lambda {|a,b| [a,b] }
|
434
|
+
# a_proc.call(1) # ArgumentError: wrong number of arguments (given 1, expected 2)
|
435
|
+
#
|
436
|
+
# See also Proc#lambda?.
|
437
|
+
#
|
438
|
+
alias yield call
|
439
|
+
|
440
|
+
# <!--
|
441
|
+
# rdoc-file=proc.c
|
442
|
+
# - prc << g -> a_proc
|
443
|
+
# -->
|
444
|
+
# Returns a proc that is the composition of this proc and the given *g*. The
|
445
|
+
# returned proc takes a variable number of arguments, calls *g* with them then
|
446
|
+
# calls this proc with the result.
|
447
|
+
#
|
448
|
+
# f = proc {|x| x * x }
|
449
|
+
# g = proc {|x| x + x }
|
450
|
+
# p (f << g).call(2) #=> 16
|
451
|
+
#
|
452
|
+
# See Proc#>> for detailed explanations.
|
453
|
+
#
|
454
|
+
def <<: (_Callable callable) -> Proc
|
455
|
+
|
456
|
+
# <!--
|
457
|
+
# rdoc-file=proc.c
|
458
|
+
# - prc >> g -> a_proc
|
459
|
+
# -->
|
460
|
+
# Returns a proc that is the composition of this proc and the given *g*. The
|
461
|
+
# returned proc takes a variable number of arguments, calls this proc with them
|
462
|
+
# then calls *g* with the result.
|
463
|
+
#
|
464
|
+
# f = proc {|x| x * x }
|
465
|
+
# g = proc {|x| x + x }
|
466
|
+
# p (f >> g).call(2) #=> 8
|
467
|
+
#
|
468
|
+
# *g* could be other Proc, or Method, or any other object responding to `call`
|
469
|
+
# method:
|
470
|
+
#
|
471
|
+
# class Parser
|
472
|
+
# def self.call(text)
|
473
|
+
# # ...some complicated parsing logic...
|
474
|
+
# end
|
475
|
+
# end
|
476
|
+
#
|
477
|
+
# pipeline = File.method(:read) >> Parser >> proc { |data| puts "data size: #{data.count}" }
|
478
|
+
# pipeline.call('data.json')
|
479
|
+
#
|
480
|
+
# See also Method#>> and Method#<<.
|
481
|
+
#
|
482
|
+
def >>: (_Callable callable) -> Proc
|
483
|
+
|
484
|
+
# <!--
|
485
|
+
# rdoc-file=proc.c
|
486
|
+
# - prc == other -> true or false
|
487
|
+
# - prc.eql?(other) -> true or false
|
488
|
+
# -->
|
489
|
+
# Two procs are the same if, and only if, they were created from the same code
|
490
|
+
# block.
|
491
|
+
#
|
492
|
+
# def return_block(&block)
|
493
|
+
# block
|
494
|
+
# end
|
495
|
+
#
|
496
|
+
# def pass_block_twice(&block)
|
497
|
+
# [return_block(&block), return_block(&block)]
|
498
|
+
# end
|
499
|
+
#
|
500
|
+
# block1, block2 = pass_block_twice { puts 'test' }
|
501
|
+
# # Blocks might be instantiated into Proc's lazily, so they may, or may not,
|
502
|
+
# # be the same object.
|
503
|
+
# # But they are produced from the same code block, so they are equal
|
504
|
+
# block1 == block2
|
505
|
+
# #=> true
|
506
|
+
#
|
507
|
+
# # Another Proc will never be equal, even if the code is the "same"
|
508
|
+
# block1 == proc { puts 'test' }
|
509
|
+
# #=> false
|
510
|
+
#
|
511
|
+
def ==: (untyped other) -> bool
|
512
|
+
|
513
|
+
# <!-- rdoc-file=proc.c -->
|
514
|
+
# Two procs are the same if, and only if, they were created from the same code
|
515
|
+
# block.
|
516
|
+
#
|
517
|
+
# def return_block(&block)
|
518
|
+
# block
|
519
|
+
# end
|
520
|
+
#
|
521
|
+
# def pass_block_twice(&block)
|
522
|
+
# [return_block(&block), return_block(&block)]
|
523
|
+
# end
|
524
|
+
#
|
525
|
+
# block1, block2 = pass_block_twice { puts 'test' }
|
526
|
+
# # Blocks might be instantiated into Proc's lazily, so they may, or may not,
|
527
|
+
# # be the same object.
|
528
|
+
# # But they are produced from the same code block, so they are equal
|
529
|
+
# block1 == block2
|
530
|
+
# #=> true
|
531
|
+
#
|
532
|
+
# # Another Proc will never be equal, even if the code is the "same"
|
533
|
+
# block1 == proc { puts 'test' }
|
534
|
+
# #=> false
|
535
|
+
#
|
536
|
+
alias eql? ==
|
537
|
+
|
538
|
+
# <!--
|
539
|
+
# rdoc-file=proc.c
|
540
|
+
# - prc.arity -> integer
|
541
|
+
# -->
|
542
|
+
# Returns the number of mandatory arguments. If the block is declared to take no
|
543
|
+
# arguments, returns 0. If the block is known to take exactly n arguments,
|
544
|
+
# returns n. If the block has optional arguments, returns -n-1, where n is the
|
545
|
+
# number of mandatory arguments, with the exception for blocks that are not
|
546
|
+
# lambdas and have only a finite number of optional arguments; in this latter
|
547
|
+
# case, returns n. Keyword arguments will be considered as a single additional
|
548
|
+
# argument, that argument being mandatory if any keyword argument is mandatory.
|
549
|
+
# A #proc with no argument declarations is the same as a block declaring `||` as
|
550
|
+
# its arguments.
|
551
|
+
#
|
552
|
+
# proc {}.arity #=> 0
|
553
|
+
# proc { || }.arity #=> 0
|
554
|
+
# proc { |a| }.arity #=> 1
|
555
|
+
# proc { |a, b| }.arity #=> 2
|
556
|
+
# proc { |a, b, c| }.arity #=> 3
|
557
|
+
# proc { |*a| }.arity #=> -1
|
558
|
+
# proc { |a, *b| }.arity #=> -2
|
559
|
+
# proc { |a, *b, c| }.arity #=> -3
|
560
|
+
# proc { |x:, y:, z:0| }.arity #=> 1
|
561
|
+
# proc { |*a, x:, y:0| }.arity #=> -2
|
562
|
+
#
|
563
|
+
# proc { |a=0| }.arity #=> 0
|
564
|
+
# lambda { |a=0| }.arity #=> -1
|
565
|
+
# proc { |a=0, b| }.arity #=> 1
|
566
|
+
# lambda { |a=0, b| }.arity #=> -2
|
567
|
+
# proc { |a=0, b=0| }.arity #=> 0
|
568
|
+
# lambda { |a=0, b=0| }.arity #=> -1
|
569
|
+
# proc { |a, b=0| }.arity #=> 1
|
570
|
+
# lambda { |a, b=0| }.arity #=> -2
|
571
|
+
# proc { |(a, b), c=0| }.arity #=> 1
|
572
|
+
# lambda { |(a, b), c=0| }.arity #=> -2
|
573
|
+
# proc { |a, x:0, y:0| }.arity #=> 1
|
574
|
+
# lambda { |a, x:0, y:0| }.arity #=> -2
|
575
|
+
#
|
576
|
+
def arity: () -> Integer
|
577
|
+
|
578
|
+
# <!--
|
579
|
+
# rdoc-file=proc.c
|
580
|
+
# - prc.binding -> binding
|
581
|
+
# -->
|
582
|
+
# Returns the binding associated with *prc*.
|
583
|
+
#
|
584
|
+
# def fred(param)
|
585
|
+
# proc {}
|
586
|
+
# end
|
587
|
+
#
|
588
|
+
# b = fred(99)
|
589
|
+
# eval("param", b.binding) #=> 99
|
590
|
+
#
|
591
|
+
def binding: () -> Binding
|
592
|
+
|
593
|
+
# <!--
|
594
|
+
# rdoc-file=proc.c
|
595
|
+
# - prc.call(params,...) -> obj
|
596
|
+
# - prc[params,...] -> obj
|
597
|
+
# - prc.(params,...) -> obj
|
598
|
+
# - prc.yield(params,...) -> obj
|
599
|
+
# -->
|
600
|
+
# Invokes the block, setting the block's parameters to the values in *params*
|
601
|
+
# using something close to method calling semantics. Returns the value of the
|
602
|
+
# last expression evaluated in the block.
|
603
|
+
#
|
604
|
+
# a_proc = Proc.new {|scalar, *values| values.map {|value| value*scalar } }
|
605
|
+
# a_proc.call(9, 1, 2, 3) #=> [9, 18, 27]
|
606
|
+
# a_proc[9, 1, 2, 3] #=> [9, 18, 27]
|
607
|
+
# a_proc.(9, 1, 2, 3) #=> [9, 18, 27]
|
608
|
+
# a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]
|
609
|
+
#
|
610
|
+
# Note that `prc.()` invokes `prc.call()` with the parameters given. It's
|
611
|
+
# syntactic sugar to hide "call".
|
612
|
+
#
|
613
|
+
# For procs created using #lambda or `->()` an error is generated if the wrong
|
614
|
+
# number of parameters are passed to the proc. For procs created using Proc.new
|
615
|
+
# or Kernel.proc, extra parameters are silently discarded and missing parameters
|
616
|
+
# are set to `nil`.
|
617
|
+
#
|
618
|
+
# a_proc = proc {|a,b| [a,b] }
|
619
|
+
# a_proc.call(1) #=> [1, nil]
|
620
|
+
#
|
621
|
+
# a_proc = lambda {|a,b| [a,b] }
|
622
|
+
# a_proc.call(1) # ArgumentError: wrong number of arguments (given 1, expected 2)
|
623
|
+
#
|
624
|
+
# See also Proc#lambda?.
|
625
|
+
#
|
626
|
+
def call: (?) -> untyped
|
627
|
+
|
628
|
+
# <!-- rdoc-file=proc.c -->
|
629
|
+
# Invokes the block, setting the block's parameters to the values in *params*
|
630
|
+
# using something close to method calling semantics. Returns the value of the
|
631
|
+
# last expression evaluated in the block.
|
632
|
+
#
|
633
|
+
# a_proc = Proc.new {|scalar, *values| values.map {|value| value*scalar } }
|
634
|
+
# a_proc.call(9, 1, 2, 3) #=> [9, 18, 27]
|
635
|
+
# a_proc[9, 1, 2, 3] #=> [9, 18, 27]
|
636
|
+
# a_proc.(9, 1, 2, 3) #=> [9, 18, 27]
|
637
|
+
# a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]
|
638
|
+
#
|
639
|
+
# Note that `prc.()` invokes `prc.call()` with the parameters given. It's
|
640
|
+
# syntactic sugar to hide "call".
|
641
|
+
#
|
642
|
+
# For procs created using #lambda or `->()` an error is generated if the wrong
|
643
|
+
# number of parameters are passed to the proc. For procs created using Proc.new
|
644
|
+
# or Kernel.proc, extra parameters are silently discarded and missing parameters
|
645
|
+
# are set to `nil`.
|
646
|
+
#
|
647
|
+
# a_proc = proc {|a,b| [a,b] }
|
648
|
+
# a_proc.call(1) #=> [1, nil]
|
649
|
+
#
|
650
|
+
# a_proc = lambda {|a,b| [a,b] }
|
651
|
+
# a_proc.call(1) # ArgumentError: wrong number of arguments (given 1, expected 2)
|
652
|
+
#
|
653
|
+
# See also Proc#lambda?.
|
654
|
+
#
|
655
|
+
alias [] call
|
656
|
+
|
657
|
+
# <!--
|
658
|
+
# rdoc-file=proc.c
|
659
|
+
# - prc.curry -> a_proc
|
660
|
+
# - prc.curry(arity) -> a_proc
|
661
|
+
# -->
|
662
|
+
# Returns a curried proc. If the optional *arity* argument is given, it
|
663
|
+
# determines the number of arguments. A curried proc receives some arguments. If
|
664
|
+
# a sufficient number of arguments are supplied, it passes the supplied
|
665
|
+
# arguments to the original proc and returns the result. Otherwise, returns
|
666
|
+
# another curried proc that takes the rest of arguments.
|
667
|
+
#
|
668
|
+
# The optional *arity* argument should be supplied when currying procs with
|
669
|
+
# variable arguments to determine how many arguments are needed before the proc
|
670
|
+
# is called.
|
671
|
+
#
|
672
|
+
# b = proc {|x, y, z| (x||0) + (y||0) + (z||0) }
|
673
|
+
# p b.curry[1][2][3] #=> 6
|
674
|
+
# p b.curry[1, 2][3, 4] #=> 6
|
675
|
+
# p b.curry(5)[1][2][3][4][5] #=> 6
|
676
|
+
# p b.curry(5)[1, 2][3, 4][5] #=> 6
|
677
|
+
# p b.curry(1)[1] #=> 1
|
678
|
+
#
|
679
|
+
# b = proc {|x, y, z, *w| (x||0) + (y||0) + (z||0) + w.inject(0, &:+) }
|
680
|
+
# p b.curry[1][2][3] #=> 6
|
681
|
+
# p b.curry[1, 2][3, 4] #=> 10
|
682
|
+
# p b.curry(5)[1][2][3][4][5] #=> 15
|
683
|
+
# p b.curry(5)[1, 2][3, 4][5] #=> 15
|
684
|
+
# p b.curry(1)[1] #=> 1
|
685
|
+
#
|
686
|
+
# b = lambda {|x, y, z| (x||0) + (y||0) + (z||0) }
|
687
|
+
# p b.curry[1][2][3] #=> 6
|
688
|
+
# p b.curry[1, 2][3, 4] #=> wrong number of arguments (given 4, expected 3)
|
689
|
+
# p b.curry(5) #=> wrong number of arguments (given 5, expected 3)
|
690
|
+
# p b.curry(1) #=> wrong number of arguments (given 1, expected 3)
|
691
|
+
#
|
692
|
+
# b = lambda {|x, y, z, *w| (x||0) + (y||0) + (z||0) + w.inject(0, &:+) }
|
693
|
+
# p b.curry[1][2][3] #=> 6
|
694
|
+
# p b.curry[1, 2][3, 4] #=> 10
|
695
|
+
# p b.curry(5)[1][2][3][4][5] #=> 15
|
696
|
+
# p b.curry(5)[1, 2][3, 4][5] #=> 15
|
697
|
+
# p b.curry(1) #=> wrong number of arguments (given 1, expected 3)
|
698
|
+
#
|
699
|
+
# b = proc { :foo }
|
700
|
+
# p b.curry[] #=> :foo
|
701
|
+
#
|
702
|
+
def curry: (?int? arity) -> Proc
|
703
|
+
|
704
|
+
# <!--
|
705
|
+
# rdoc-file=proc.c
|
706
|
+
# - prc.hash -> integer
|
707
|
+
# -->
|
708
|
+
# Returns a hash value corresponding to proc body.
|
709
|
+
#
|
710
|
+
# See also Object#hash.
|
711
|
+
#
|
712
|
+
def hash: () -> Integer
|
713
|
+
|
714
|
+
# <!--
|
715
|
+
# rdoc-file=proc.c
|
716
|
+
# - prc.lambda? -> true or false
|
717
|
+
# -->
|
718
|
+
# Returns `true` if a Proc object is lambda. `false` if non-lambda.
|
719
|
+
#
|
720
|
+
# The lambda-ness affects argument handling and the behavior of `return` and
|
721
|
+
# `break`.
|
722
|
+
#
|
723
|
+
# A Proc object generated by `proc` ignores extra arguments.
|
724
|
+
#
|
725
|
+
# proc {|a,b| [a,b] }.call(1,2,3) #=> [1,2]
|
726
|
+
#
|
727
|
+
# It provides `nil` for missing arguments.
|
728
|
+
#
|
729
|
+
# proc {|a,b| [a,b] }.call(1) #=> [1,nil]
|
730
|
+
#
|
731
|
+
# It expands a single array argument.
|
732
|
+
#
|
733
|
+
# proc {|a,b| [a,b] }.call([1,2]) #=> [1,2]
|
734
|
+
#
|
735
|
+
# A Proc object generated by `lambda` doesn't have such tricks.
|
736
|
+
#
|
737
|
+
# lambda {|a,b| [a,b] }.call(1,2,3) #=> ArgumentError
|
738
|
+
# lambda {|a,b| [a,b] }.call(1) #=> ArgumentError
|
739
|
+
# lambda {|a,b| [a,b] }.call([1,2]) #=> ArgumentError
|
740
|
+
#
|
741
|
+
# Proc#lambda? is a predicate for the tricks. It returns `true` if no tricks
|
742
|
+
# apply.
|
743
|
+
#
|
744
|
+
# lambda {}.lambda? #=> true
|
745
|
+
# proc {}.lambda? #=> false
|
746
|
+
#
|
747
|
+
# Proc.new is the same as `proc`.
|
748
|
+
#
|
749
|
+
# Proc.new {}.lambda? #=> false
|
750
|
+
#
|
751
|
+
# `lambda`, `proc` and Proc.new preserve the tricks of a Proc object given by
|
752
|
+
# `&` argument.
|
753
|
+
#
|
754
|
+
# lambda(&lambda {}).lambda? #=> true
|
755
|
+
# proc(&lambda {}).lambda? #=> true
|
756
|
+
# Proc.new(&lambda {}).lambda? #=> true
|
757
|
+
#
|
758
|
+
# lambda(&proc {}).lambda? #=> false
|
759
|
+
# proc(&proc {}).lambda? #=> false
|
760
|
+
# Proc.new(&proc {}).lambda? #=> false
|
761
|
+
#
|
762
|
+
# A Proc object generated by `&` argument has the tricks
|
763
|
+
#
|
764
|
+
# def n(&b) b.lambda? end
|
765
|
+
# n {} #=> false
|
766
|
+
#
|
767
|
+
# The `&` argument preserves the tricks if a Proc object is given by `&`
|
768
|
+
# argument.
|
769
|
+
#
|
770
|
+
# n(&lambda {}) #=> true
|
771
|
+
# n(&proc {}) #=> false
|
772
|
+
# n(&Proc.new {}) #=> false
|
773
|
+
#
|
774
|
+
# A Proc object converted from a method has no tricks.
|
775
|
+
#
|
776
|
+
# def m() end
|
777
|
+
# method(:m).to_proc.lambda? #=> true
|
778
|
+
#
|
779
|
+
# n(&method(:m)) #=> true
|
780
|
+
# n(&method(:m).to_proc) #=> true
|
781
|
+
#
|
782
|
+
# `define_method` is treated the same as method definition. The defined method
|
783
|
+
# has no tricks.
|
784
|
+
#
|
785
|
+
# class C
|
786
|
+
# define_method(:d) {}
|
787
|
+
# end
|
788
|
+
# C.new.d(1,2) #=> ArgumentError
|
789
|
+
# C.new.method(:d).to_proc.lambda? #=> true
|
790
|
+
#
|
791
|
+
# `define_method` always defines a method without the tricks, even if a
|
792
|
+
# non-lambda Proc object is given. This is the only exception for which the
|
793
|
+
# tricks are not preserved.
|
794
|
+
#
|
795
|
+
# class C
|
796
|
+
# define_method(:e, &proc {})
|
797
|
+
# end
|
798
|
+
# C.new.e(1,2) #=> ArgumentError
|
799
|
+
# C.new.method(:e).to_proc.lambda? #=> true
|
800
|
+
#
|
801
|
+
# This exception ensures that methods never have tricks and makes it easy to
|
802
|
+
# have wrappers to define methods that behave as usual.
|
803
|
+
#
|
804
|
+
# class C
|
805
|
+
# def self.def2(name, &body)
|
806
|
+
# define_method(name, &body)
|
807
|
+
# end
|
808
|
+
#
|
809
|
+
# def2(:f) {}
|
810
|
+
# end
|
811
|
+
# C.new.f(1,2) #=> ArgumentError
|
812
|
+
#
|
813
|
+
# The wrapper *def2* defines a method which has no tricks.
|
814
|
+
#
|
815
|
+
def lambda?: () -> bool
|
816
|
+
|
817
|
+
# <!--
|
818
|
+
# rdoc-file=proc.c
|
819
|
+
# - prc.parameters(lambda: nil) -> array
|
820
|
+
# -->
|
821
|
+
# Returns the parameter information of this proc. If the lambda keyword is
|
822
|
+
# provided and not nil, treats the proc as a lambda if true and as a non-lambda
|
823
|
+
# if false.
|
824
|
+
#
|
825
|
+
# prc = proc{|x, y=42, *other|}
|
826
|
+
# prc.parameters #=> [[:opt, :x], [:opt, :y], [:rest, :other]]
|
827
|
+
# prc = lambda{|x, y=42, *other|}
|
828
|
+
# prc.parameters #=> [[:req, :x], [:opt, :y], [:rest, :other]]
|
829
|
+
# prc = proc{|x, y=42, *other|}
|
830
|
+
# prc.parameters(lambda: true) #=> [[:req, :x], [:opt, :y], [:rest, :other]]
|
831
|
+
# prc = lambda{|x, y=42, *other|}
|
832
|
+
# prc.parameters(lambda: false) #=> [[:opt, :x], [:opt, :y], [:rest, :other]]
|
833
|
+
#
|
834
|
+
def parameters: (?lambda: boolish) -> Method::param_types
|
835
|
+
|
836
|
+
# <!--
|
837
|
+
# rdoc-file=proc.c
|
838
|
+
# - prc.source_location -> [String, Integer]
|
839
|
+
# -->
|
840
|
+
# Returns the Ruby source filename and line number containing this proc or `nil`
|
841
|
+
# if this proc was not defined in Ruby (i.e. native).
|
842
|
+
#
|
843
|
+
def source_location: () -> [String, Integer]?
|
844
|
+
|
845
|
+
# <!--
|
846
|
+
# rdoc-file=proc.c
|
847
|
+
# - prc.to_proc -> proc
|
848
|
+
# -->
|
849
|
+
# Part of the protocol for converting objects to Proc objects. Instances of
|
850
|
+
# class Proc simply return themselves.
|
851
|
+
#
|
852
|
+
def to_proc: () -> self
|
853
|
+
|
854
|
+
# <!--
|
855
|
+
# rdoc-file=proc.c
|
856
|
+
# - prc.to_s -> string
|
857
|
+
# -->
|
858
|
+
# Returns the unique identifier for this proc, along with an indication of where
|
859
|
+
# the proc was defined.
|
860
|
+
#
|
861
|
+
def to_s: () -> String
|
862
|
+
|
863
|
+
# <!-- rdoc-file=proc.c -->
|
864
|
+
# Returns the unique identifier for this proc, along with an indication of where
|
865
|
+
# the proc was defined.
|
866
|
+
#
|
867
|
+
alias inspect to_s
|
868
|
+
end
|