Özel durumlar: Try... son olarak ifade (F#)
try...finally İfade bile bir kod bloğu bir istisna atar temizleme kod yürütmesine olanak verir.
try
expression1
finally
expression2
Notlar
try...finally İfade kod yürütmek için kullanılabilir expression2 mı yürütülmesi sırasında bir özel durum üretilir ne olursa olsun yukarıdaki sözdiziminde expression1.
Tür expression2 tam bir ifadedir; değerine katkıda değil bir özel durum oluşmaz, döndürülen türü son değeri expression1. Bir özel durum ortaya çıktığında hiçbir değeri döndürülür ve çağrı yığını yukarı sonraki eşleşen özel durum işleyici için akış denetiminin aktarır. Herhangi bir istisna işleyicisi bulunamazsa, program sonlanır. Eşleşen bir işleyici kodu yürütülür veya program sonlanır, kod, önce finally şube gerçekleştirilir.
Aşağıdaki kodu kullanımını gösterir try...finally ifadesi.
let divide x y =
let stream : System.IO.FileStream = System.IO.File.Create("test.txt")
let writer : System.IO.StreamWriter = new System.IO.StreamWriter(stream)
try
writer.WriteLine("test1");
Some( x / y )
finally
writer.Flush()
printfn "Closing stream"
stream.Close()
let result =
try
divide 100 0
with
| :? System.DivideByZeroException -> printfn "Exception handled."; None
Konsola çıktı aşağıdaki gibidir.
Closing stream
Exception handled.
Çıktısı görebileceðiniz gibi dış durum işleniyor önce akış kapatıldı ve dosya test.txt metni içeren test1, arabellek Temizlenen ve özel denetim dış istisna işleyicisine transfer olsa diske yazılan gösterir.
Dikkat try...with yapısıdır karşı ayrı bir yapı try...finally oluşturun. Bu nedenle, kodunuzun her ikisi de istiyorsa, bir with bloğu ve bir finally bloğu, aşağıdaki kod örneğinde olduğu gibi iki yapıları iç içe olması.
exception InnerError of string
exception OuterError of string
let function1 x y =
try
try
if x = y then raise (InnerError("inner"))
else raise (OuterError("outer"))
with
| InnerError(str) -> printfn "Error1 %s" str
finally
printfn "Always print this."
let function2 x y =
try
function1 x y
with
| OuterError(str) -> printfn "Error2 %s" str
function2 100 100
function2 100 10
Sıra ifadeler ve zaman uyumsuz iş akışları, hesaplama ifadeleri bağlamında da dahil olmak üzere try...finally ifadeler, özel bir uygulama olabilir. Daha fazla bilgi için bkz. Hesaplama ifadeleri (F#).
Ayrıca bkz.
Başvuru
Özel durumlar: Try deyimi (F#) ile...