2011-05-05 43 views
2

我試圖用Printf.sprintf打印出的值是一個類型的多個選項如何在Ocaml中打印另一種類型的字符串值?

type tid = int 

    type lock = string 

    type rdwrlock = 
     | Rdlock of lock 
     | Wrlock of lock 

    type rdwrlockid = rdwrlock * tid 

基本上內,我想打印出一個「rdwrlockid」,這是(rdwrlock * TID)我可以使用printf中的%d選項輕鬆地打印出「tid」,但是如何訪問rdwrlock內鎖的字符串?

回答

3

堅持你的例子這是可以做到如下:

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 oftenly字符串表示,你可以寫一個輔助功能:

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

然後在printf中使用它:

Printf.printf "%d %s\n" i (string_of_lock k) 
相關問題