Emphasize custom syntax are expressions.
This commit is contained in:
parent
95b8dcc623
commit
fc54fdc907
@ -220,7 +220,7 @@ fn implementation_func(
|
|||||||
Ok(Dynamic::UNIT)
|
Ok(Dynamic::UNIT)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Register the custom syntax (sample): exec |x| -> { x += 1 } while x < 0;
|
// Register the custom syntax (sample): exec |x| -> { x += 1 } while x < 0
|
||||||
engine.register_custom_syntax(
|
engine.register_custom_syntax(
|
||||||
&[ "exec", "|", "$ident$", "|", "->", "$block$", "while", "$expr$" ], // the custom syntax
|
&[ "exec", "|", "$ident$", "|", "->", "$block$", "while", "$expr$" ], // the custom syntax
|
||||||
1, // the number of new variables declared within this custom syntax
|
1, // the number of new variables declared within this custom syntax
|
||||||
@ -228,6 +228,20 @@ engine.register_custom_syntax(
|
|||||||
)?;
|
)?;
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Remember that a custom syntax acts as an _expression_, so it can show up practically anywhere:
|
||||||
|
|
||||||
|
```rust
|
||||||
|
// Use as an expression:
|
||||||
|
let foo = (exec |x| -> { x += 1 } while x < 0) * 100;
|
||||||
|
|
||||||
|
// Use as a function call argument:
|
||||||
|
do_something(exec |x| -> { x += 1 } while x < 0, 24, true);
|
||||||
|
|
||||||
|
// Use as a statement:
|
||||||
|
exec |x| -> { x += 1 } while x < 0;
|
||||||
|
// ^ terminate statement with ';'
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
Step Four - Disable Unneeded Statement Types
|
Step Four - Disable Unneeded Statement Types
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
@ -29,8 +29,11 @@ fn test_custom_syntax() -> Result<(), Box<EvalAltResult>> {
|
|||||||
|
|
||||||
context.scope_mut().push(var_name, 0 as INT);
|
context.scope_mut().push(var_name, 0 as INT);
|
||||||
|
|
||||||
|
let mut count: INT = 0;
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
context.eval_expression_tree(stmt)?;
|
context.eval_expression_tree(stmt)?;
|
||||||
|
count += 1;
|
||||||
|
|
||||||
let stop = !context
|
let stop = !context
|
||||||
.eval_expression_tree(condition)?
|
.eval_expression_tree(condition)?
|
||||||
@ -48,10 +51,20 @@ fn test_custom_syntax() -> Result<(), Box<EvalAltResult>> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(Dynamic::UNIT)
|
Ok(count.into())
|
||||||
},
|
},
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
engine.eval::<INT>(
|
||||||
|
r"
|
||||||
|
let x = 0;
|
||||||
|
let foo = (exec |x| -> { x += 2 } while x < 42) * 10;
|
||||||
|
foo
|
||||||
|
"
|
||||||
|
)?,
|
||||||
|
210
|
||||||
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
engine.eval::<INT>(
|
engine.eval::<INT>(
|
||||||
r"
|
r"
|
||||||
|
Loading…
Reference in New Issue
Block a user