列挙体について
(文章は仮です)
列挙体を知ってから、判別共用体を知れば、理解しやすいかも
定義方法と使い方
type Color = | Red | Green | Yellow ~ main とかで ~ let shingoki = Color.Red if shingoki = Color.Red then printfn "Stop!" else printfn "Go"
これは、1行で見たほうが分かりやすいかも。Red か、Green か、Yellow のどれかですよ。という意味。列挙体も型だから type と書く。
type Color = Red | Green | Yellow
使うときは、列挙体名を書いても書かなくても使える。個人的には Red が変数なのか列挙体なのかが見ても分からないため、列挙体名.メンバー名と書いた方がいいのではと思っているが好き好きで。
let shingoki = Red let shingoki = Color.Red if shingoki = Red then printfn "Stop!" elif shingoki = Color.Red then printfn "Stop!" else printfn "Go!" let shingoki2 value = match value with | Red -> printfn "Stop!" | Green -> printfn "Go!" | Yellow -> printfn "Caution"
メンバーに初期値をセットすることもできる。初期値をセットした場合、列挙体名.メンバー名と書かなければいけなくなる(列挙体名を省略できない)。
type Color = | Red = 0 | Green = 1 | Yellow = 2 ~ main とかで ~ let shingoki = Color.Red if shingoki = Color.Red then printfn "Stop!" elif shingoki = Color.Red then printfn "Stop!" else printfn "Go!"
パターンマッチするときは、メンバー以外の値が来た場合(メンバーの値が 3 とか)の対応処理を書く必要がある
let shingoki2 value = match value with | Color.Red -> printfn "Stop!" | Color.Green -> printfn "Go!" | Color.Yellow -> printfn "Caution" | _ -> printfn "undefined"