2
OCamlにいくつかのコードを入力していたので、私は一度に2つのケースをマッチさせたいと思いました。(私が書いている関数は可換ですから)"変数は...このパターンの両側に現れなければなりません"
type something =
| Two of int * int
| One of int
let my_function p q =
match p, q with
| Two (_, _) as two, One (x)
| One (x), Two (_, _) as two -> (* some value *)
| _ -> (* some other value *)
;;
私は次のエラーを取得しています:
Error: Variable two must occur on both sides of this | pattern
私はas
ステートメントを削除し、私はロジックの目的のためにそれを必要とするときに問題が発生しません。なぜ私はこれのようにすることができないのですか?ロジックを2回書き直すことに頼らなければならないのですか?
解決策が見つかりました。マッチステートメントの2番目の '|'は、 'something * something'型の単一の値として' One(x)、Two(_、_) 'をマシーンしていました。括弧を追加すると、問題が修正されます: 'One(x)、(Two(_、_)as two)' – shooqie