Mark Pearl

I am plodding along with my F# book. I have reached the part where I know enough about the syntax of the language to understand something if I read it – but not enough about the language to be productive and write something useful. A bit of a frustrating place to be.

Needless to say when you are in this state of mind – you end up paging mindlessly through chapters of my F# book with no real incentive to learn anything until you hit “Exceptions”.

Raising an exception explicitly

So lets look at raising an exception explicitly – in C# we would throw the exception, F# is a lot more polite instead of throwing the exception it raises it, …

(raise (System.InvalidOperationException(“no thank you”))) quite simple…

Catching an Exception

So I would expect to be able to catch an exception as well – lets look at some C# code first…

try
{
    Console.WriteLine("Raise Exception");
    throw new InvalidOperationException("no thank you");
}
catch
{
    Console.WriteLine("Catch Exception and Carry on..");
}                    
Console.WriteLine("Carry on...");
Console.ReadLine();

The F# equivalent would go as follows…

open System;
try
    Console.WriteLine("Raise Exception")
    raise (System.InvalidOperationException("no thank you"))
with
    | _ -> Console.WriteLine("Catch Exception and Carry on..")

Console.WriteLine("Carry on...")
Console.ReadLine();

In F# there is a “try, with” and a “try finally”

Finally…

In F# there is a finally block however the “with” and “finally” can’t be combined.

open System;
try
    Console.WriteLine("Raise Exception")
    raise (System.InvalidOperationException("no thank you"))
finally    
    Console.WriteLine("Finally carry on...")
    Console.ReadLine()


blog comments powered by Disqus

Want to get my personal insights on what I learn as I learn it? Subscribe now!


/