Commit 043090020f

Andrew Kelley <andrew@ziglang.org>
2019-02-18 23:49:26
docs: shadowing
closes #1245
1 parent 8922008
Changed files (1)
doc/langref.html.in
@@ -2377,7 +2377,36 @@ test "labeled break from labeled block expression" {
       {#code_end#}
       <p>Here, {#syntax#}blk{#endsyntax#} can be any name.</p>
       {#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_open|switch#}
       {#code_begin|test|switch#}
 const assert = @import("std").debug.assert;