mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Allow omission of parentheses in one line pattern matching [Feature #16182]
This commit is contained in:
parent
00d66f7ec2
commit
ecb6d6a4ef
4 changed files with 27 additions and 10 deletions
|
@ -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]
|
||||
|
|
4
parse.y
4
parse.y
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue