option
目的
存在 する値 (Some) と不在 (None) を明示的 に扱 うOptionと基本操作 を提供 します。- reboot
後 の stdlib で「単純 な欠如 はOption、失敗理由 つきはResult」という責務分離 を支 える最小基盤 です。
注意
unwrapは便宜上 残 している unsafe helper であり、通常 はmatchやoption_unwrap_orを優先 してください。- doctest では trap
依存 のshould_panicを使 わず、安全 な分岐 とret:比較 で確認 します。
計算量
基本操作 はすべて O(1) です。
TEST
#entry main
#target std
#import "std/test" as *
#import "core/option" as *
fn main <()*>i32> ():
let checks <Vec<Result<(),str>>>:
checks_new
|> checks_push assert is_some some 123
|> checks_push assert is_none none<i32>
|> checks_push assert_eq_i32 123 unwrap some 123
|> checks_push assert_eq_i32 7 option_unwrap_or none<i32> 7
checks_exit_code checksTEST
#entry main
#target std
#import "std/test" as *
#import "core/option" as *
#import "core/math" as *
fn inc <(i32)->i32> (x):
add x 1
fn main <()*>i32> ():
let a0 option_map some 9 inc;
let a1 option_map some 9 inc;
let b option_map none<i32> inc;
let checks <Vec<Result<(),str>>>:
checks_new
|> checks_push assert is_some a0
|> checks_push assert is_none b
|> checks_push assert_eq_i32 10 unwrap a1
checks_exit_code checksOption: 値がある(Some)か無い(None)かを表す
目的:
- 失敗・欠損を明示するための共通型です。
実装(アルゴリズム):
- enum の 2 変種で表現します。
注意(重要):
- Some は payload を保持します。
計算量:
- O(1)
none: None を作る
目的:
- 値が無いことを表す Option を返します。
実装(アルゴリズム):
- Option::None を返すだけです。
注意(重要):
- 型引数 .T は文脈で決まります。
計算量:
- O(1)
some: 値を包んで返す
目的:
- v を Some に包んで返します。
実装(アルゴリズム):
- Option::Some を構築します。
注意(重要):
- v の型が .T になります。
計算量:
- O(1)
is_some: 値があるか判定する
目的:
- Some なら true、None なら false を返します。
実装(アルゴリズム):
- match で Some/None を分岐します。
注意(重要):
- 値そのものは取り出しません。
計算量:
- O(1)
is_none: 値が無いか判定する
目的:
- None なら true、Some なら false を返します。
実装(アルゴリズム):
- match で Some/None を分岐します。
注意(重要):
- is_some の否定です。
計算量:
- O(1)
unwrap: Some の中身を取り出す(None は到達不能)
目的:
- Some(v) なら v を返します。
実装(アルゴリズム):
- match で分岐し、None は unreachable を呼びます。
注意(重要):
- None の可能性がある場合は is_some や option_unwrap_or を使ってください。
計算量:
- O(1)
option_unwrap_or: デフォルト値を返す
目的:
- Some(v) なら v、None なら default を返します。
実装(アルゴリズム):
- match で分岐します。
注意(重要):
- default は eager に評価されます。
計算量:
- O(1)
option_map: 値がある時だけ関数を適用する
目的:
- Some(v) なら f(v) を Some として返し、None はそのまま返します。
実装(アルゴリズム):
- match で Some/None を分岐し、Some のときのみ f を適用します。
注意(重要):
- f は純粋関数を想定します。
計算量:
- O(1)