| 1 | fn with_optional_delta(base int, delta ?int) int { |
| 2 | actual_delta := delta or { 0 } |
| 3 | return base + actual_delta |
| 4 | } |
| 5 | |
| 6 | fn optional_only(value ?int) int { |
| 7 | return value or { -1 } |
| 8 | } |
| 9 | |
| 10 | struct OptionalGreeter {} |
| 11 | |
| 12 | fn (_ OptionalGreeter) add(base int, delta ?int) int { |
| 13 | return with_optional_delta(base, delta) |
| 14 | } |
| 15 | |
| 16 | type OptionalGreeterFn = fn (int, ?int) int |
| 17 | |
| 18 | fn test_trailing_optional_params_can_be_omitted_in_free_function_calls() { |
| 19 | assert with_optional_delta(5) == 5 |
| 20 | assert with_optional_delta(5, 2) == 7 |
| 21 | assert optional_only() == -1 |
| 22 | assert optional_only(8) == 8 |
| 23 | } |
| 24 | |
| 25 | fn test_trailing_optional_params_can_be_omitted_in_method_calls() { |
| 26 | greeter := OptionalGreeter{} |
| 27 | assert greeter.add(5) == 5 |
| 28 | assert greeter.add(5, 2) == 7 |
| 29 | } |
| 30 | |
| 31 | fn test_trailing_optional_params_can_be_omitted_in_fn_variable_calls() { |
| 32 | handler := OptionalGreeterFn(with_optional_delta) |
| 33 | assert handler(5) == 5 |
| 34 | assert handler(5, 2) == 7 |
| 35 | } |
| 36 | |