Groups | Search | Server Info | Login | Register


Groups > tw.bbs.comp.lang.perl > #28

轉換錯誤處理慣例

From Kang-min Liu <gugod@gugod.org>
Newsgroups tw.bbs.comp.lang.perl
Subject 轉換錯誤處理慣例
Date 2022-09-12 18:50 +0900
Organization Aioe.org NNTP Server
Message-ID <m1k068udj1.fsf@gugod.org> (permalink)

Show all headers | View raw


談到要把把錯誤狀態從函式中傳出來,基本上有兩種方式。有不少函式庫傾向使用
die,但把錯誤狀況作為傳回值的一部分的作法也很常見。

今天發現 Try::Tiny 在的傳回值很適合用來做個簡單的轉換器:

    use Try::Tiny;
    sub error_or_result (&) {
        my ($f) = @_;
        try {
            undef, $f->()
        } catch {
            $_
        }
    }

用法:

    my ($err, @ret) = error_or_result { foo() };

如果 foo() 執行途中以 die 傳錯誤出來,那麼 $err 內會裝有錯誤內容,而
@ret 則會是空的。如果沒有錯誤發生,那麼 $err 會是 undef,而 @ret 會裝有
foo() 的傳回值。

也就是它會把例外事件裝換成傳回值,如果慣例上你的程式碼內是使用傳回值來處
理錯誤狀態,那麼有這種轉換用的函式或許可以讓一些地方簡化一點。

----

Back to tw.bbs.comp.lang.perl | Previous | NextNext in thread | Find similar


Thread

轉換錯誤處理慣例 Kang-min Liu <gugod@gugod.org> - 2022-09-12 18:50 +0900
  Re: 轉換錯誤處理慣例 Kang-min Liu <gugod@gugod.org> - 2022-09-14 12:31 +0900

csiph-web