Allow omission of parentheses in one line pattern matching [Feature #16182]

This commit is contained in:
Kazuki Tsujimoto 2021-08-19 17:03:17 +09:00
Родитель 00d66f7ec2
Коммит ecb6d6a4ef
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: BCEA306C49B81CD7
4 изменённых файлов: 27 добавлений и 10 удалений

Просмотреть файл

@ -140,7 +140,7 @@ Both array and hash patterns support "rest" specification:
end
#=> "matched"
In +case+ (but not in <code>=></code> and +in+) expressions, parentheses around both kinds of patterns could be omitted:
Parentheses around both kinds of patterns could be omitted:
case [1, 2]
in Integer, Integer
@ -158,6 +158,12 @@ In +case+ (but not in <code>=></code> and +in+) expressions, parentheses around
end
#=> "matched"
[1, 2] => a, b
[1, 2] in a, b
{a: 1, b: 2, c: 3} => a:
{a: 1, b: 2, c: 3} in a:
Find pattern is similar to array pattern but it can be used to check if the given object has any elements that match the pattern:
case ["a", 1, "b", "c", 2]

Просмотреть файл

@ -1732,7 +1732,7 @@ expr : command_call
p->ctxt.in_kwarg = 1;
}
{$<tbl>$ = push_pvtbl(p);}
p_expr
p_top_expr_body
{pop_pvtbl(p, $<tbl>4);}
{
p->ctxt.in_kwarg = $<ctxt>3.in_kwarg;
@ -1750,7 +1750,7 @@ expr : command_call
p->ctxt.in_kwarg = 1;
}
{$<tbl>$ = push_pvtbl(p);}
p_expr
p_top_expr_body
{pop_pvtbl(p, $<tbl>4);}
{
p->ctxt.in_kwarg = $<ctxt>3.in_kwarg;

Просмотреть файл

@ -1135,5 +1135,16 @@ ruby_version_is "2.7" do
result.should == true
end
end
ruby_version_is "3.1" do
it "can omit parentheses in one line pattern matching" do
[1, 2] => a, b
a.should == 1
b.should == 2
{a: 1} => a:
a.should == 1
end
end
end
end

Просмотреть файл

@ -1519,13 +1519,13 @@ END
assert_raise(NoMatchingPatternError) do
{a: 1} => {a: 0}
end
assert_syntax_error("if {} => {a:}; end", /void value expression/)
assert_syntax_error(%q{
1 => a, b
}, /unexpected/, '[ruby-core:95098]')
assert_syntax_error(%q{
1 => a:
}, /unexpected/, '[ruby-core:95098]')
[1, 2] => a, b
assert_equal 1, a
assert_equal 2, b
{a: 1} => a:
assert_equal 1, a
assert_equal true, (1 in 1)
assert_equal false, (1 in 2)