53 lines
1.1 KiB
Markdown
53 lines
1.1 KiB
Markdown
Variable Shadowing
|
|
==================
|
|
|
|
{{#include ../links.md}}
|
|
|
|
In Rhai, new [variables] automatically _shadow_ existing ones of the same name. There is no error.
|
|
|
|
This behavior is consistent with Rust.
|
|
|
|
```rust
|
|
let x = 42;
|
|
let y = 123;
|
|
|
|
print(x); // prints 42
|
|
|
|
let x = 88; // <- 'x' is shadowed here
|
|
|
|
// At this point, it is no longer possible to access the
|
|
// original 'x' on the first line...
|
|
|
|
print(x); // prints 88
|
|
|
|
let x = 0; // <- 'x' is shadowed again
|
|
|
|
// At this point, it is no longer possible to access both
|
|
// previously-defined 'x'...
|
|
|
|
print(x); // prints 0
|
|
|
|
{
|
|
let x = 999; // <- 'x' is shadowed in a block
|
|
|
|
print(x); // prints 999
|
|
}
|
|
|
|
print(x); // prints 0 - shadowing within the block goes away
|
|
|
|
print(y); // prints 123 - 'y' is not shadowed
|
|
```
|
|
|
|
|
|
~~~admonish tip "Tip: Disable shadowing"
|
|
|
|
Set [`Engine::set_allow_shadowing`][options] to `false` to turn [variables] shadowing off.
|
|
|
|
```rust
|
|
let x = 42;
|
|
|
|
let x = 123; // <- syntax error: variable 'x' already defined
|
|
// when variables shadowing is disallowed
|
|
```
|
|
~~~
|