自定义效果
定义你自己的效果,并通过函数签名传播它们。
自定义效果
Sounio 允许你声明自己的效果,用于建模领域特定的副作用。
声明一个效果
效果是一组具名操作:
effect Fail {
fn fail(msg: string) -> !
}
使用效果
像普通函数一样调用效果操作,并在签名中声明该效果:
fn might_fail() with Fail {
Fail.fail("something went wrong")
}
传播需求
调用者也必须声明该效果:
fn main() with Fail {
might_fail()
}
如果忘记了,编译器会报错:
fn main() {
might_fail() // ERROR: Fail effect not declared / handled
}
规范说明: 效果处理器(Handlers)
语言设计包含代数效果处理器(resumption、解释等)。如果你在旧文档中看到 handle / resume 语法,请将其视为 规范层面 的内容,除非当前编译器模式明确支持。