зеркало из https://github.com/github/ruby.git
Allow value omission in Hash literals
`{x:, y:}` is a syntax sugar of `{x: x, y: y}`.
This commit is contained in:
Родитель
64e056a4c5
Коммит
c60dbcd1c5
9
parse.y
9
parse.y
|
@ -5617,6 +5617,15 @@ assoc : arg_value tASSOC arg_value
|
|||
/*% %*/
|
||||
/*% ripper: assoc_new!($1, $2) %*/
|
||||
}
|
||||
| tLABEL
|
||||
{
|
||||
/*%%%*/
|
||||
NODE *val = gettable(p, $1, &@$);
|
||||
if (!val) val = NEW_BEGIN(0, &@$);
|
||||
$$ = list_append(p, NEW_LIST(NEW_LIT(ID2SYM($1), &@1), &@$), val);
|
||||
/*% %*/
|
||||
/*% ripper: assoc_new!($1, id_is_var(p, get_id($1)) ? var_ref!($1) : vcall!($1)) %*/
|
||||
}
|
||||
| tSTRING_BEG string_contents tLABEL_END arg_value
|
||||
{
|
||||
/*%%%*/
|
||||
|
|
|
@ -2178,4 +2178,21 @@ class TestHash < Test::Unit::TestCase
|
|||
end;
|
||||
end
|
||||
end
|
||||
|
||||
def test_value_omission
|
||||
x = 1
|
||||
y = 2
|
||||
assert_equal({x: 1, y: 2}, {x:, y:})
|
||||
assert_equal({one: 1, two: 2}, {one:, two:})
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def one
|
||||
1
|
||||
end
|
||||
|
||||
def two
|
||||
2
|
||||
end
|
||||
end
|
||||
|
|
Загрузка…
Ссылка в новой задаче