2
のは、私はOCamlの中でこのように型を定義しましょう:ocamlでのマッチングはコンストラクタを呼び出しますか?
type 'a foo = My_none | Bar of 'a;;
let a = Bar 4;;
"と呼ばれる" Bar
コンストラクタを作成するとき。
次の関数では、一致するものがコンストラクタを呼び出すか、または単にコンストラクタを呼び出さずにパターンを「認識」しますか?
let get_bar x = match x with
| My_none -> failwith "None"
| Bar z -> z;;
まさに私が探していたものです、ありがとう! –
これはパターンマッチングについて考える正しい方法ですが、私が知る限り、マッチングがこのように実装されるという保証はありません。コンパイラとランタイムは、観測可能な結果が同じであれば好きなように処理できます。新しい価値の構築には、観察可能な副作用がないため、理論的には起こりうる。 (でもそうではありません) –
データ型の定義は、同じ名前の*値コンストラクタ*と*パターンコンストラクタ*を作成するものと考えることができます。後者は実際には*値デストラクタ* (プロパティにアクセスするために)値の一部を破棄します。 –