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