軌道
/
Gleam
Gleam
/
課程大綱
/
不透明型別
不透

不透明型別 在 Gleam

4 個練習

關於 不透明型別

Gleam 的不透明型別(opaque type)是一種自訂型別,只有定義該型別的模組才能建構或模式比對該型別的值。這很適合用來建立只能以特定方式使用的型別。

不透明型別是用opaque關鍵字定義的。

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

這個PositiveInt型別適合用在你需要整數、但這個整數必須大於或等於零的情況。一般的 Gleam 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 個練習,就能練習 不透明型別