学习路径
/
Gleam
Gleam
/
教学大纲
/
不透明类型
不透

不透明类型 属于 Gleam

4 个练习

关于 不透明类型

Gleam 中的不透明类型是一种自定义类型,只有定义该类型的模块才能构造或模式匹配该类型的值。当你希望某个类型只能以特定方式使用时,这会很有用。

不透明类型使用opaque关键字定义。

pub opaque type PositiveInt {
  PositiveInt(inner: Int)
}

这个PositiveInt类型适用于需要整数、但该整数必须大于等于零的场景。普通的 GleamInt类型不行,因为Int也可以是负数。

定义该类型的模块可以定义一个函数来获取内部的整数值,还可以定义一个用于创建PositiveInt的函数;如果传入的值不是正数,这个函数会返回一个错误。

pub fn from_int(i: Int) -> Result(PositiveInt, String) {
  case i {
    _ if i < 0 -> Error("Value must be positive")
    _ -> Ok(PositiveInt(i))
  }
}

pub fn to_int(i: PositiveInt) -> Int {
  i.inner
}

有了这套 API,其他模块就无法用负数构造PositiveInt,因此任何接受PositiveInt的函数都能确信该值是正数。

通过 GitHub 编辑 该链接会在新窗口或标签页中打开

学习 不透明类型

练习已锁定

再解锁 1 个练习即可练习 不透明类型