var

Types

属于update函数的错误类型

pub type CallbackError {
  CallbackError(err: error.Exception)
}

Constructors

属于scope函数的错误类型

pub type ScopeError {
  StartErr(err: actor.StartError)
  CallbackErr(err: error.Exception)
}

Constructors

属于 try_* 函数的错误类型

pub type Timeout {
  Timeout
}

Constructors

  • Timeout

    超时

要与可变值交互需要持有此类型

pub opaque type Var(var)

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 get_forever(var: Var(var)) -> var

获取值并一直等待直至成功

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 set_forever(var: Var(var), new_val: var) -> var

设置值并一直等待直至成功,随后返回新的值

pub fn try_get(var: Var(var)) -> Result(var, Timeout)

尝试获取值

pub fn try_set(
  var: Var(var),
  new_val: var,
) -> Result(var, Timeout)

尝试设置值并返回新的值

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
Search Document