[DOC] Add documentation for hash value omission syntax

This commit is contained in:
Victor Shepelev 2021-12-19 18:09:52 +02:00 committed by GitHub
parent 1dd10e1892
commit a0f10a973f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
Notes: git 2021-12-20 01:10:11 +09:00
Merged: https://github.com/ruby/ruby/pull/5244

Merged-By: nobu <nobu@ruby-lang.org>
3 changed files with 34 additions and 0 deletions

View File

@ -210,6 +210,24 @@ definition. If a keyword argument is given that the method did not list,
and the method definition does not accept arbitrary keyword arguments, an
ArgumentError will be raised.
Keyword argument value can be omitted, meaning the value will be be fetched
from the context by the name of the key
keyword1 = 'some value'
my_method(positional1, keyword1:)
# ...is the same as
my_method(positional1, keyword1: keyword1)
Be aware that when method parenthesis are omitted, too, the parsing order might
be unexpected:
my_method positional1, keyword1:
some_other_expression
# ...is actually parsed as
my_method(positional1, keyword1: some_other_expression)
=== Block Argument
The block argument sends a closure from the calling scope to the method.

View File

@ -356,6 +356,14 @@ is equal to
{ :"a 1" => 1, :"b 2" => 2 }
Hash values can be omitted, meaning that value will be fetched from the context
by the name of the key:
x = 100
y = 200
h = { x:, y: }
#=> {:x=>100, :y=>200}
See Hash for the methods you may use with a hash.
== \Range Literals

8
hash.c
View File

@ -6701,6 +6701,14 @@ static const rb_data_type_t env_data_type = {
* # Raises SyntaxError (syntax error, unexpected ':', expecting =>):
* h = {0: 'zero'}
*
* Hash value can be omitted, meaning that value will be fetched from the context
* by the name of the key:
*
* x = 0
* y = 100
* h = {x:, y:}
* h # => {:x=>0, :y=>100}
*
* === Common Uses
*
* You can use a \Hash to give names to objects: