var
Types
属于update函数的错误类型
pub type CallbackError {
CallbackError(err: error.Exception)
}
Constructors
-
CallbackError(err: error.Exception)回调函数异常
属于scope函数的错误类型
pub type ScopeError {
StartErr(err: actor.StartError)
CallbackErr(err: error.Exception)
}
Constructors
-
StartErr(err: actor.StartError)进程启动失败
-
CallbackErr(err: error.Exception)回调函数异常
Values
pub fn get(var: Var(var)) -> var
获取值
操作可能超时,可以使用try_get
如果想一直等待可以使用get_forever
Example
use val <- var.scope(5, 1000)
assert var.get(val) == 5
pub fn is_alive(var: Var(var)) -> Bool
检查可变值是否存活
该函数主要用在可变值疑似出逃的情景,使用前可以进行检查
Notice
不要过度相信这个结果,因为值可能前脚还存活后脚就被销毁了
pub fn scope(
init_val: var,
time_out: Int,
scope_fn: fn(Var(var)) -> reason,
) -> Result(reason, ScopeError)
创建一个进程模拟可变值
可变值在回调函数中可用,函数结束自动销毁
Notice
如果回调函数已经结束,但仍有进程在持有可变值则有引发异常的风险
对于可变值出逃后的行为不作保障
Param
init_val:初始值
time_out:作为有超时保护的函数的超时上限(毫秒)
scope_fn:一个接受可变值(Var)作为参数的函数
pub fn set(var: Var(var), new_val: var) -> var
设置值,随后后返回新的值
操作可能超时,可以使用try_set
如果想一直等待可以使用set_forever
Example
use val <- var.scope(5, 1000)
assert var.get(val) == 5
assert var.set(val, 10) == 10
assert var.get(val) == 10
pub fn update(
var: Var(var),
update: fn(var) -> var,
) -> Result(var, CallbackError)
使用函数更新值,随后返回更新后的值
若函数异常则保持原有值不变
Notice
该函数没有超时保护,它会一直等待,直至回调函数返回或异常
若回调函数卡住则会造成阻塞,导致其它操作超时
Example
use val <- var.scope(5, 1000)
assert var.update(val, fn(v) { { v + 1 } * 2 }) == Ok(12)
var.update(val, fn(_) { panic }) // Error(..)
assert var.get(val) == 12