E4050#
发现循环依赖。
MoonBit 包中的顶层定义是相互递归的。这意味着定义可以以任何顺序相互引用。然而,在顶层变量定义之间的依赖中不允许循环。
错误示例#
pub let a : Int = f() // Error: Definition cycle detected : a -> f -> a
fn f() -> Int { // Error: Definition cycle detected : a -> f -> a
a
}
建议#
这个错误的修复取决于程序的逻辑。一个可能的修复是将变量定义为 Ref[_?]
,并在程序的 init
块中初始化变量。
pub let a : Ref[Int?] = Ref::new(None)
fn init {
a.val = Some(f())
}
fn f() -> Int {
a.val.unwrap()
}