docs: shadowing

closes #1245
This commit is contained in:
Andrew Kelley 2019-02-18 17:49:26 -05:00
parent 8922008dec
commit 043090020f
No known key found for this signature in database
GPG Key ID: 7C5F548F728501A9

View File

@ -2377,7 +2377,36 @@ test "labeled break from labeled block expression" {
{#code_end#} {#code_end#}
<p>Here, {#syntax#}blk{#endsyntax#} can be any name.</p> <p>Here, {#syntax#}blk{#endsyntax#} can be any name.</p>
{#see_also|Labeled while|Labeled for#} {#see_also|Labeled while|Labeled for#}
{#header_open|Shadowing#}
<p>It is never allowed for an identifier to "hide" another one by using the same name:</p>
{#code_begin|test_err|redefinition#}
const pi = 3.14;
test "inside test block" {
// Let's even go inside another block
{
var pi: i32 = 1234;
}
}
{#code_end#}
<p>
Because of this, when you read Zig code you can rely on an identifier always meaning the same thing,
within the scope it is defined. Note that you can, however use the same name if the scopes are separate:
</p>
{#code_begin|test#}
test "separate scopes" {
{
const pi = 3.14;
}
{
var pi: bool = true;
}
}
{#code_end#}
{#header_close#} {#header_close#}
{#header_close#}
{#header_open|switch#} {#header_open|switch#}
{#code_begin|test|switch#} {#code_begin|test|switch#}
const assert = @import("std").debug.assert; const assert = @import("std").debug.assert;