Scala: why duplicate declaration is allowed inside pattern matching? -
it seems able bind pattern identifier x
, declare 1 more x
identifier in same scope. why code work?
"123" match { case x@"123" => // expected compilation error here, works. var works val x = "456" x // "456" }
explaining link sls appreciated.
i don't think there's dedicated explanation of situation in sls, looking @ pattern matching expressions part of spec, 1 can find following wording:
a pattern matching expression
e match { case p_1 => b_1 … case p_n => b_n }
the scope of pattern variables in p_i comprises pattern's guard , corresponding block b_i.
which can understood block b_i
has own scope, nested scope of pattern variables.
now variable x
bound in pattern variable scope p_i
, , redefined in b_i
scope. gives situation of nested scopes, , normal rules of name shadowing in nested scope apply.
Comments
Post a Comment