diff options
author | Victor Shepelev <[email protected]> | 2021-12-19 18:09:52 +0200 |
---|---|---|
committer | GitHub <[email protected]> | 2021-12-20 01:09:52 +0900 |
commit | a0f10a973fb94a0ee73da7cab792128cdf601783 (patch) | |
tree | e025219312d597d04d0670951c13a867f2f98721 | |
parent | 1dd10e189274546689c0b59f6a76849b2808f255 (diff) |
[DOC] Add documentation for hash value omission syntax
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/5244
Merged-By: nobu <[email protected]>
-rw-r--r-- | doc/syntax/calling_methods.rdoc | 18 | ||||
-rw-r--r-- | doc/syntax/literals.rdoc | 8 | ||||
-rw-r--r-- | hash.c | 8 |
3 files changed, 34 insertions, 0 deletions
diff --git a/doc/syntax/calling_methods.rdoc b/doc/syntax/calling_methods.rdoc index fc806d5c31..da061dbfdb 100644 --- a/doc/syntax/calling_methods.rdoc +++ b/doc/syntax/calling_methods.rdoc @@ -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. diff --git a/doc/syntax/literals.rdoc b/doc/syntax/literals.rdoc index 66e17fd503..32fe5110ce 100644 --- a/doc/syntax/literals.rdoc +++ b/doc/syntax/literals.rdoc @@ -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 @@ -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: |