NamedParam
NamedParam is the type used to give named parameters to callables.
Its literal syntax uses the infix :
operator, which may have an empty right-side, but whose left-side must not be a literal, and may be a name in the current scope.
var a = "b"
"a": "b" # -> Pair("a", "b")
(a : "b") # -> Pair("b", "b")
a: "b" # -> NamedParam a: "b"
func foo(a, b = 2) { a/b }
var p = a: 4
say foo(p) # -> 2
var args = [b:7, a:21]
say foo(args...) # -> 3
It is not possible to write a function which takes a literal NamedParam
argument, but this can be overcome by passing a variable reference that holds a NamedParam
object, and later dereferencing it.
func baz(param) {
"Have #{param}, #{*param}"
}
var a = a:1
say baz(a) # error: no matching function for parameter a
say baz(\a) # prints: Have REF(0x55f9455ca270), a: 1