F#懒惰和例外

时间:2014-07-04 01:30:52

标签: exception f# lazy-evaluation

给出这个例子:

let value = try (lazy raise(Exception())).Value with | _ -> false

为什么未在try块中捕获异常。请记住,我提出这样的异常来证明这个例子。关键是如果我有一个抛出和异常的惰性代码,它似乎无法在try块中捕获。我必须在异常的匹配中具体,还是必须在惰性表达式中捕获异常?

2 个答案:

答案 0 :(得分:0)

以下打印异常和false的值。

let value = 
    try 
        (lazy raise(System.Exception())).Value 
    with  
        | exn -> printfn "%A" exn
                 false
printfn "%A" value

答案 1 :(得分:0)

我无法回复您的结果。你在看什么?

let value = 
    try 
        (lazy raise(Exception())).Value 
        true
    with
     | ex -> 
         printfn "got exception"; 
         false

给我

got exception

val value : bool = false

编辑:

添加调试图像

enter image description here