E4151

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) }
}

建议#

如果你的回调函数真的需要捕获局部变量,可以把局部变量变成回调函数的额外参数。