参数与默认值

opt<T> 参数

参数的可选性统一用 opt<T> 表达:

func hello(name: opt<string>) -> string {
    if name is some(v) {
        `hello ${v}`
    } else {
        "hello"
    }
}

这些调用都合法:

hello()
hello("Alice")
hello(some("Alice"))
hello(none)

默认值

默认值必须是编译期可确定表达式:

func repeat(text: string, count: int = 1) -> string {
    text
}

规则:

  • 默认值不允许依赖前面的参数
  • 默认值能唯一推导类型时,参数类型可以省略
  • = none 这类情况必须显式写出 opt<T> 类型

位置参数中的省略

尾部参数可以省略的情况:

  • 参数类型是 opt<T>
  • 参数带默认值

具名参数中的省略

具名参数函数中:

  • 未给默认值的非 opt<T> 参数必填
  • opt<T> 参数可不传,不传时为 none
  • 带默认值的参数可不传,不传时取默认值
  • 未知参数和重复参数都是编译错误