Aracılığıyla paylaş


Özel durumlar: Try deyimi (F#) ile...

Bu konuda açıklar try...with ifade, özel durum F# dil işleme için kullanılan ifade.

try
 expression1
with
  | pattern1 -> expression2
  | pattern2 -> expression3
  ...

Notlar

try...with F# özel durumlarý iþlemek için kullanılan ifade. Benzer şekilde, try...catch C# [NULL]'taki ifadesi. Yukarıdaki sözdiziminde, kodunu expression1 bir özel durum oluşturabilir. try...with İfade bir değer döndürür. Hiçbir özel durum oluşursa, ifadenin değerini döndürür expression1. Bir exception Is Thrown'un, her pattern özel durum ve karşılık gelen ilk eşleşen deseni için sırayla karşılaştırma expression, olarak bilinen özel durum işleyicisi, o şube yürütülür ve genel ifade bu özel durum işleyicisi ifadenin değeri döndürür. Hiçbir desen eşleşiyorsa, eşleşen bir işleyici bulunana kadar özel çağrısı yığının yukarısına yayar. Her özel durum işleyicilerini ifadesinde dönen değerlerin türleri deyim tarafından döndürülen türüyle eşleşmelidir try blok.

Sık sık hata oluştu da gerçeği her özel durum işleyici ifadelerde'den verilen geçerli bir değer olduğu anlamına gelir. Sık sık bir desen, bir seçenek türü ifadenin sağlamaktır. Aşağıdaki kod örneği, bu düzeni gösterilmektedir.

let divide1 x y =
   try
      Some (x / y)
   with
      | :? System.DivideByZeroException -> printfn "Division by zero!"; None

let result1 = divide1 100 0

Özel durumlar olabilir.net özel durumlar veya F# özel durumlar olabilir. F# özel durumlar kullanarak tanımlayabilirsiniz exception anahtar sözcüğü.

Özel durum türü ve diğer koşullara göre filtre uygulamak için çeşitli desenler kullanabilirsiniz; seçenekleri aşağıdaki tabloda özetlenmiştir.

Desen

Description

:? exception-type

Belirtilen eşleşir.net özel durum türü.

:? exception-typeolarakidentifier

Belirtilen eşleşir.net özel durum türü, ancak özel durum adlandırılmış değeri verir.

exception-name(arguments)

Bir F# özel durum türü ile eşleşen ve bağımsız değişken bağlar.

identifier

Herhangi bir özel durumla ve özel durum nesnesi adı bağlar. Eşdeğer :? System.Exception as tanımlayıcısı

identifierne zamancondition

Koşul doğruysa, herhangi bir özel durum ile eşleşir.

Örnekler

Aşağıdaki kod örnekleri, çeşitli özel durum işleyicisi desenleri kullanımını göstermektedir.

// This example shows the use of the as keyword to assign a name to a
// .NET exception.
let divide2 x y =
  try
    Some( x / y )
  with
    | :? System.DivideByZeroException as ex -> printfn "Exception! %s " (ex.Message); None

// This version shows the use of a condition to branch to multiple paths
// with the same exception.
let divide3 x y flag =
  try
     x / y
  with
     | ex when flag -> printfn "TRUE: %s" (ex.ToString()); 0
     | ex when not flag -> printfn "FALSE: %s" (ex.ToString()); 1

let result2 = divide3 100 0 true

// This version shows the use of F# exceptions.
exception Error1 of string
exception Error2 of string * int

let function1 x y =
   try
      if x = y then raise (Error1("x"))
      else raise (Error2("x", 10))
   with
      | Error1(str) -> printfn "Error1 %s" str
      | Error2(str, i) -> printfn "Error2 %s %d" str i

function1 10 10
function1 9 2

Not

try...with Ayrı bir ifadeden yapısıdır try...finally ifadesi.Bu nedenle, kodunuzun her ikisi de istiyorsa, bir with bloğu ve bir finally blok, iç içe iki ifadeler gerekecektir.

Not

Kullanabileceğiniz try...with da zaman uyumsuz iş akışları ve özelleştirilmiş bir sürümünü case diğer hesaplaması ifadelerde, hangi try...with deyimi kullanılır.Daha fazla bilgi için, bkz. Zaman uyumsuz iş akışları (F#) ve Hesaplama ifadeleri (F#).

Ayrıca bkz.

Başvuru

Özel durum türü (F#)

Özel durumlar: Try... son olarak ifade (F#)

Diğer Kaynaklar

Özel durum işleme (F#)