mirror of
https://github.com/nushell/nushell
synced 2024-12-26 13:03:07 +00:00
Finish adding support for optional params (#530)
This commit is contained in:
parent
e949658381
commit
caf73c36f2
2 changed files with 22 additions and 8 deletions
|
@ -39,18 +39,24 @@ fn eval_call(
|
|||
let block = engine_state.get_block(block_id);
|
||||
|
||||
let mut stack = stack.collect_captures(&block.captures);
|
||||
for (arg, param) in call.positional.iter().zip(
|
||||
decl.signature()
|
||||
.required_positional
|
||||
.iter()
|
||||
.chain(decl.signature().optional_positional.iter()),
|
||||
) {
|
||||
let result = eval_expression(engine_state, &mut stack, arg)?;
|
||||
|
||||
for (param_idx, param) in decl
|
||||
.signature()
|
||||
.required_positional
|
||||
.iter()
|
||||
.chain(decl.signature().optional_positional.iter())
|
||||
.enumerate()
|
||||
{
|
||||
let var_id = param
|
||||
.var_id
|
||||
.expect("internal error: all custom parameters must have var_ids");
|
||||
|
||||
stack.add_var(var_id, result);
|
||||
if let Some(arg) = call.positional.get(param_idx) {
|
||||
let result = eval_expression(engine_state, &mut stack, arg)?;
|
||||
stack.add_var(var_id, result);
|
||||
} else {
|
||||
stack.add_var(var_id, Value::nothing(call.head));
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(rest_positional) = decl.signature().rest_positional {
|
||||
|
|
|
@ -1300,3 +1300,11 @@ fn get_table_columns_1() -> TestResult {
|
|||
fn get_table_columns_2() -> TestResult {
|
||||
run_test("[[name, age, grade]; [paul,21,a]] | columns | nth 1", "age")
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn allow_missing_optional_params() -> TestResult {
|
||||
run_test(
|
||||
"def foo [x?:int] { if $x != $nothing { $x + 10 } else { 5 } }; foo",
|
||||
"5",
|
||||
)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue