Özel durumlar: işlevleri yükseltme ve yeniden değerlendirme
raise
işlevi, bir hatanın veya istisnai koşulun oluştuğuna işaret etmek için kullanılır. Hata hakkındaki bilgiler bir özel durum nesnesinde yakalanır.reraise
İşlev, çağrı zincirinde işlenen bir özel durumu yaymak için kullanılır.
Sözdizimi
raise (expression)
Açıklamalar
raise
İşlev bir özel durum nesnesi oluşturur ve yığın geri sarma işlemini başlatır. Yığın geri sarma işlemi ortak dil çalışma zamanı (CLR) tarafından yönetilir, bu nedenle bu işlemin davranışı diğer tüm .NET dillerinde olduğu gibi aynıdır. Yığın geri sarma işlemi, oluşturulan özel durumla eşleşen bir özel durum işleyicisi için yapılan bir aramadır. Arama, varsa geçerli try...with
ifadede başlar. Bloktaki with
her desen sırayla denetlenir. Eşleşen bir özel durum işleyicisi bulunduğunda, özel durum işlenmiş olarak kabul edilir; aksi takdirde, yığın kaldırılır ve with
eşleşen bir işleyici bulunana kadar çağrı zincirini engeller denetlenir. Çağrı zincirinde karşılaşılan tüm finally
bloklar da yığın gevşedikçe sırayla yürütülür.
raise
işlevi C# veya C++ ile eşdeğerdirthrow
.
Aşağıdaki kod örnekleri, özel durum oluşturmak için işlevinin raise
kullanımını gösterir.
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
İşlev, raise
aşağıdaki örnekte gösterildiği gibi .NET özel durumlarını yükseltmek için de kullanılabilir.
let divide x y =
if (y = 0) then raise (System.ArgumentException("Divisor cannot be zero!"))
else
x / y
Özel durumu yeniden değerlendirme
İşlev, reraise
çağrı zincirinde işlenen bir özel durumu yaymak için bir with
blokta kullanılabilir.
reraise
özel durum işleneni almaz. Yöntemin bir bağımsız değişkeni çağırandan başka bir kitaplık yöntemine geçirmesi ve kitaplık yönteminin çağırana geçirilmesi gereken bir özel durum oluşturması en kullanışlı yöntemdir.
İşlev, reraise
veya dahil olmak üzere task { .. }
hesaplanan listelerdeki, dizilerdeki, dizilerdeki veya hesaplama ifadelerindeki yapı bloğunda with
/try
with
kullanılamaz.async { .. }
open System
let getFirstCharacter(value: string) =
try
value[0]
with :? IndexOutOfRangeException as e ->
reraise()
let s = getFirstCharacter("")
Console.WriteLine($"The first character is {s}")
// The example displays the following output:
// System.IndexOutOfRangeException: Index was outside the bounds of the array.
// at System.String.get_Chars(Int32 index)
// at getFirstCharacter(String value)
// at <StartupCode>.main@()
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin