E4050

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