74 lines
2.3 KiB
Markdown
74 lines
2.3 KiB
Markdown
Statements
|
|
==========
|
|
|
|
{{#include ../links.md}}
|
|
|
|
|
|
Statements are terminated by semicolons `;` and they are mandatory,
|
|
except for the _last_ statement in a _block_ (enclosed by `{` ... `}` pairs) where it can be omitted.
|
|
|
|
Semicolons can also be omitted for statement types that always end in a block – for example
|
|
the [`if`], [`while`], [`for`], [`loop`] and [`switch`] statements.
|
|
|
|
```rust
|
|
let a = 42; // normal assignment statement
|
|
let a = foo(42); // normal function call statement
|
|
foo < 42; // normal expression as statement
|
|
|
|
let a = { 40 + 2 }; // 'a' is set to the value of the statements block, which is the value of the last statement
|
|
// ^ the last statement does not require a terminating semicolon (but also works with it)
|
|
// ^ semicolon required here to terminate the 'let' statement
|
|
// it is a syntax error without it, even though it ends with '}'
|
|
// that is because the 'let' statement doesn't end in a block
|
|
|
|
if foo { a = 42 }
|
|
// ^ no need to terminate an if-statement with a semicolon
|
|
// that is because the 'if' statement ends in a block
|
|
|
|
4 * 10 + 2 // a statement which is just one expression - no ending semicolon is OK
|
|
// because it is the last statement of the whole block
|
|
```
|
|
|
|
|
|
Statements Block
|
|
----------------
|
|
|
|
### Syntax
|
|
|
|
Statements blocks in Rhai are formed by enclosing zero or more statements within braces `{`...`}`.
|
|
|
|
> `{` _statement_`;` _statement_`;` ... _statement_ `}`
|
|
>
|
|
> `{` _statement_`;` _statement_`;` ... _statement_`;` `}` `// trailing semi-colon is optional`
|
|
|
|
### Closed scope
|
|
|
|
A statements block forms a _closed_ scope.
|
|
|
|
Any [variable] and/or [constant] defined within the block are removed outside the block, so are
|
|
[modules] [imported][`import`] within the block.
|
|
|
|
```rust
|
|
let x = 42;
|
|
let y = 18;
|
|
|
|
{
|
|
import "hello" as h;
|
|
const HELLO = 99;
|
|
let y = 0;
|
|
|
|
h::greet(); // ok
|
|
|
|
print(y + HELLO); // prints 99 (y is zero)
|
|
|
|
:
|
|
:
|
|
} // <- 'HELLO' and 'y' go away here...
|
|
|
|
print(x + y); // prints 60 (y is still 18)
|
|
|
|
print(HELLO); // <- error: 'HELLO' not found
|
|
|
|
h::greet(); // <- error: module 'h' not found
|
|
```
|