Gleamの例外処理
お馴染みなResultという型があるのでそれを使う。
以下は0が与えられているか判定し、もし0が含まれているのならエラーを発生させるサンプルコード。
ちなみにGleamはゼロ除算すると例外ではなく0を返す。
code:rust
import gleam/io
import gleam/int.{to_string}
pub fn main() {
let #(a, b) = #(2, 0)
case mod(a, b) {
Ok(val) -> io.println(val |> int.to_string)
Error(_) -> io.println("Not divide zero.")
}
}
fn mod(a: Int, b: Int) -> Result(Int, Nil) {
case a, b {
0, _ -> Error(Nil)
_, 0 -> Error(Nil)
a, b -> Ok(a / b)
}
}
Resultを含む構造型を上手く処理したい場合は公式ライブラリのgleam/resultを使う。
以下よく使う関数を紹介する。
try
Resultを剥いた値をコールバック関数に与える。use構文を使うとスッキリと記述できる。
code:rust
// 上述のプログラムをresutl.tryを使って書いてみる。
// 重複している部分とimport文は省略
pub fn main() {
let #(a, b) = #(9, 3)
use val <- result.try(mod(a, b))
io.println(val |> int.to_string)
Ok(Nil)
}