Как я могу напечатать строковое значение чего-то, завернутого в другой тип в Ocaml? - PullRequest
2 голосов
/ 05 мая 2011

Я пытаюсь использовать Printf.sprintf, чтобы распечатать значение, имеющее тип нескольких параметров

    type tid = int

    type lock = string

    type rdwrlock = 
      | Rdlock of lock
      | Wrlock of lock

    type rdwrlockid = rdwrlock * tid

По сути, я хочу распечатать "rdwrlockid", который является (rdwrlock * tid), и я могу легко распечатать "tid", используя опцию% d в printf, но как мне получить доступ к строке внутри блокировки внутри рудверка?

1 Ответ

3 голосов
/ 05 мая 2011

Придерживаясь вашего примера, это можно сделать следующим образом:

let y, z = (Rdlock "a", 1) in
Printf.printf "%d %s\n" z (match y with Rdlock r -> r | Wrlock w -> w)

Это может быть немного упрощено:

type lck = READ | WRITE
type lckid = lck * tid

let k, i = (READ, 1) in
Printf.printf "%d %s\n" i (match k with READ -> "R" | WRITE -> "W");

Или, если вам нужно строковое представление lockчасто вы можете написать вспомогательную функцию:

let string_of_lock k =
    match k with
    | READ  -> "R"
    | WRITE -> "W"

и затем использовать ее в printf:

Printf.printf "%d %s\n" i (string_of_lock k)
...