Aracılığıyla paylaş


Ö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...

Diğer Kaynaklar

Özel durum işleme (F#)