Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
- Fungsi
raiseini digunakan untuk menunjukkan bahwa terjadi kesalahan atau kondisi luar biasa. Informasi tentang kesalahan diambil dalam objek pengecualian. - Fungsi
reraiseini digunakan untuk menyebarluaskan pengecualian yang ditangani hingga rantai panggilan.
Sintaksis
raise (expression)
Komentar
Fungsi ini raise menghasilkan objek pengecualian dan memulai proses unwinding tumpukan. Proses unwinding tumpukan dikelola oleh runtime bahasa umum (CLR), sehingga perilaku proses ini sama seperti dalam bahasa .NET lainnya. Proses unwinding tumpukan adalah pencarian untuk handler pengecualian yang cocok dengan pengecualian yang dihasilkan. Pencarian dimulai dalam ekspresi saat ini try...with , jika ada. Setiap pola dalam with blok diperiksa, secara berurutan. Ketika penangan pengecualian yang cocok ditemukan, pengecualian dianggap ditangani; jika tidak, tumpukan dilepas dan with memblokir rantai panggilan diperiksa sampai handler yang cocok ditemukan. Setiap finally blok yang ditemui dalam rantai panggilan juga dijalankan secara berurutan saat tumpukan melepas penat.
Fungsi raise ini setara throw dengan dalam C# atau C++.
Contoh kode berikut mengilustrasikan penggunaan raise fungsi untuk menghasilkan pengecualian.
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
Fungsi ini raise juga dapat digunakan untuk menaikkan pengecualian .NET, seperti yang ditunjukkan dalam contoh berikut.
let divide x y =
if (y = 0) then raise (System.ArgumentException("Divisor cannot be zero!"))
else
x / y
Mengurai kembali pengecualian
Fungsi reraise ini dapat digunakan dalam with blok untuk menyebarluaskan pengecualian yang ditangani hingga rantai panggilan.
reraise tidak mengambil operand pengecualian. Ini paling berguna ketika metode meneruskan argumen dari pemanggil ke beberapa metode pustaka lain, dan metode pustaka menimbulkan pengecualian yang harus diteruskan ke pemanggil.
Fungsi reraise ini tidak dapat digunakan pada with blok trywith/konstruksi dalam daftar komputasi, array, urutan, atau ekspresi komputasi termasuk task { .. } atau .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@()