列挙体について

(文章は仮です)

列挙体を知ってから、判別共用体を知れば、理解しやすいかも

定義方法と使い方

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"