Next: Recursive types and functions, Previous: Tuples, Up: Extensions to C
L functions can have default arguments UNIMPLEMENTED, like C++ ones:
Int foo(Int bar = 3) { bar } foo(5); //5 foo(); //3
L functions argument passing may also be done using keyword arguments UNIMPLEMENTED:
Int foo(Int bar, Int baz) { 10 * bar + baz }
If you write:
Int foo(Int bar = 1, Int baz) { 10 * bar + baz }
Then foo
can only be called like this:
foo(3, 4) //OK, 34 foo(baz:5) //OK, 15 foo(5) //Wrong
Use of keyword arguments is a really good style when you create functions that create complex objects (structures and records), especially when they contain fields that have the same type.
For instance:
let richards_shoes = Shoes(color:Green, sole_color:Brown)
Is much better style than
let richards_shoes = Shoes(Green, Brown)
In general, it is better to use them when a function has several arguments of the same type, or several arguments at all. It makes your code more readable.
You can also use them for “cosmetic” usage, as in:
foreach(a, in:list) {...} foreach(element:a, in:list) {...} divide(25, by:73);