caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* Re: [Caml-list] try with
  2007-08-05 15:29 try with tmp123
@ 2007-08-05 15:23 ` Dave Benjamin
  2007-08-05 15:50 ` skaller
  1 sibling, 0 replies; 3+ messages in thread
From: Dave Benjamin @ 2007-08-05 15:23 UTC (permalink / raw)
  To: tmp123; +Cc: caml-list

On Sun, 5 Aug 2007, tmp123@menta.net wrote:

> Sorry for an easy question about exceptions:
>
> If in a code like:
>
> let v1 = f1 () in
> f2 v1
>
> I like to handle in a different way an exception (like Not_found) 
> produced inside f1 of the same one produced in f2 (or even not treat the 
> one produced in f2), which one is a correct way to write the code?

One way (besides the exception technique you posted) is to convert the 
exception to an option or other variant:

let maybe_v1 = try Some (f1 ()) with Not_found -> None in
match maybe_v1 with
   | Some v1 -> f2 v1
   | None -> handle_f1_exception ()

Also see the following page for a "let try" syntax extension:

http://martin.jambon.free.fr/extend-ocaml-syntax.html#lettry


^ permalink raw reply	[flat|nested] 3+ messages in thread

* try with
@ 2007-08-05 15:29 tmp123
  2007-08-05 15:23 ` [Caml-list] " Dave Benjamin
  2007-08-05 15:50 ` skaller
  0 siblings, 2 replies; 3+ messages in thread
From: tmp123 @ 2007-08-05 15:29 UTC (permalink / raw)
  To: caml-list

Hello,

Sorry for an easy question about exceptions:

If in a code like:

let v1 = f1 () in
f2 v1

I like to handle in a different way an exception (like Not_found) 
produced inside f1 of the same one produced in f2 (or even not treat the 
one produced in f2), which one is a correct way to write the code?

Because the only thing I see up to now is something so overloaded as:

exception Skip;
try
  let v1 =
    try
      f1()
    with
      Not_found -> handle_f1_exception();
                   raise Skip
  in
    f2 v1
with
  Skip -> ();


Thanks again.
  


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Caml-list] try with
  2007-08-05 15:29 try with tmp123
  2007-08-05 15:23 ` [Caml-list] " Dave Benjamin
@ 2007-08-05 15:50 ` skaller
  1 sibling, 0 replies; 3+ messages in thread
From: skaller @ 2007-08-05 15:50 UTC (permalink / raw)
  To: tmp123; +Cc: caml-list

On Sun, 2007-08-05 at 17:29 +0200, tmp123@menta.net wrote:
> Hello,
> 
> Sorry for an easy question about exceptions:
> 
> If in a code like:
> 
> let v1 = f1 () in
> f2 v1
> 
> I like to handle in a different way an exception (like Not_found) 
> produced inside f1 of the same one produced in f2 (or even not treat the 
> one produced in f2), which one is a correct way to write the code?

Eliminate the exceptions, they're usually a bad idea:

	let v1 = try Some (f1 ()) with Not_found -> None in
	let v2 = match v1 with
	| None -> Error1
	| Some x -> try Some (f2 x) with Not_found -> None
	in match v2 with
	| None -> Error2
	| Some v2 -> ...

-- 
John Skaller <skaller at users dot sf dot net>
Felix, successor to C++: http://felix.sf.net


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2007-08-05 15:50 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-08-05 15:29 try with tmp123
2007-08-05 15:23 ` [Caml-list] " Dave Benjamin
2007-08-05 15:50 ` skaller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).