Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] kprintf with user formatters
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Damien <Damien.Pous@e...>
Subject: Re: [Caml-list] kprintf with user formatters
On Thu, 15 Jul 2004 02:17:58 +0200 Markus Mottl wrote:
> Btw., since we are at it: I'd like to use my own printers depending on
> a conditional, e.g.:
> 
>   let log level fmt =
>     if may_log level then
>       kfprintf ...
>     else
>       ???
> 
> If the given log level "level" does not allow logging the message
> specified by "fmt", I just want to ignore the parameters provided
> together with "fmt" - but how?  Is there some (safe) trick, or do I
> have to write my own Printf/Format-modules?  I don't want to waste
> computation time by unnecessarily converting format arguments to
> strings, which may be very costly, e.g. when this would mean
> converting IPs to hostnames, etc.

I had the same problem a month ago,
I ended with the following ugly function:

let log b fmt = 
  if b then Printf.printf fmt
  else 
    let rec f x = Obj.magic f in 
      f fmt
(* val f: bool -> ('a, out_channel, unit) format -> 'a *)

(I think this is safe since f just eats its arguments, 
 and gets typed with "-rectypes" : ('b->'a) as 'a)

maybe a function "zprintf" could be added to Printf and Format to do
this job ?

regards,
damien

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners