E4151#
FuncRef[T]
类型的值必须是无捕获的函数。
MoonBit 提供了一个内建类型 FuncRef[T]
,用于表示类型为 T
的无捕获的函数。在 MoonBit 的原生后端,FuncRef[T]
直接对应函数指针类型,因此 FuncRef[T]
可以作为回调函数直接被传递给 C FFI,例如 UNIX 的信号处理回调。FuncRef[T]
类型的值必须是无捕获的函数,因此如果提供了一个有捕获的函数或一个非函数的值,编译器就会产生本错误。
错误示例#
test {
let x : Int = 42
let _ : FuncRef[() -> Unit] = fn () { println(x) }
}
建议#
如果你的回调函数真的需要捕获局部变量,可以把局部变量变成回调函数的额外参数。