E4117#
只能直接应用带标签的函数。
这意味着您不能将带标签的函数作为参数传递给另一个函数。
错误示例#
///|
pub fn accumulate(acc~ : Int, value : Int) -> Int {
acc + value
}
///|
test {
let xs = [1, 2, 3, 4, 5]
let sum = xs.fold(init=0, accumulate)
// ^~~~~~~~~~~~
// Error: Function with labelled arguments can only be applied directly.
}
使用部分应用 创建一个不带标签参数的函数值。
建议#
///|
pub fn accumulate(acc~ : Int, value : Int) -> Int {
acc + value
}
///|
test {
let xs = [1, 2, 3, 4, 5]
let sum = xs.fold(init=0, fn(acc, value) { accumulate(acc~, value) })
inspect(sum, content="15")
}