OCaml соответствующие кортежи? Почему этот случай совпадения не используется? - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть следующий бит кода в OCaml:

let matchElement x y= 
  match x with 
    | (y,_) -> true 
    | _ -> false;;

, и я получаю предупреждение, что регистр _ всегда будет неиспользованным.

Мое намерение состояло в том, что если x соответствует кортежу, где первый элемент равен типу y, то он возвращает true, в противном случае он возвращает false. Ты знаешь как это сделать?

1 Ответ

3 голосов
/ 05 апреля 2020

y фактически является новым именем для того, с чем оно сопоставляется, и оно совпадает с именем y. Это эквивалентно:

let matchElement x y = 
  match x with 
    | (z, _) -> true (* A completely unrelated binding *)
    | _ -> false;;

Где вы видите, что все значения x соответствуют первому шаблону.

Чтобы сделать то, что вы хотите сделать, вы можете написать это:

let matchElement x y =
    match x with
    | (y', _) when y' = y -> true
    | _ -> false

(* Or equivalently *)
let matchElement (x, _) y = x = y
...