コンストラクターアリティとは独立したコンストラクターとパターンマッチングする方法はありますか?ときどきパターンマッチでは、コンストラクタだけが気になりますが、それに関連付けられたデータは気にしません。Ocamlパターンは、そのアーティーとは独立してデータコンストラクターと一致します
私は、ADTのコンストラクタのアリティを変更すると、すべての「フィールド」を破棄するパターンマッチ(すべてのパターンマッチを変更する必要があります)を実行する必要があります。データコンストラクタ
私は複数のコンストラクタ
(* time * message *)
type log_message =
Warning of float * string
| Error of float * string
とADTを持っていると私は、このタイプの値を検査し、だけ私は場合
let is_error_message x = match x with
| Warning _, _ -> false
| Error _, _ -> true
のようなものを記述する必要がコンストラクタを気にするとします後で戻って警告に重大度フィールドを追加して、私に与えたい
is_error_message
のパターンに新しいワイルドカードを追加して、タイプチェッカーを満たす必要があります。
let is_error_message x = match x with
| Warning _, _, _ -> false
| Error _, _ -> true
私は '私はちょうど構文を台無しにタプルを取る代わりに、単項のコンストラクタのマルチパラメータコンストラクタの(フロート*文字列)'&C ...の警告を言うためのものだと思います... (そして 'Warning _ _'がなぜ有効でなかったのか分からなかった)。あなたが言っていることはまったく正しいので、私はただ静かに質問を修正したくありません。 –
これは正しくありません。通常のコンストラクタの引数はタプルではありません。 '_'が複数の引数にマッチする理由は、このユースケースをカバーする機能として追加されているからです。 – gsg
@gsgどのバージョンが追加されましたか? –