郎咸武

郎咸武的博客

他的个人主页  他的博客

已修正错误与未修正错误

郎咸武  2009年08月18日 星期二 23:30 | 1097次浏览 | 3条评论

已修正错误与未修正错误

g(X) ->
     case (catch h(X)) of
         {'EXIT', _} ->
              10;
         Val -> Val
     end.
h(cat) -> exit(dog);
h(N) -> 10*N.

 

  求值 h(cat)将产生一个异常, 而求值 h(20)将返回值 200。求值 g(cat)或 g(dog)
将返回值 10 而求值 g(10)将返回值 100。
  当我们求值 g(cat)时,将发生如下一系列事情:
  1.求值 h(cat)被求值。
  2.h 产生一个异常。
  3.该异常被 g 捕获。
  4.g 返回一个值。
  当求取 g(dog)之值时,将引发下列事情:
  1.h(dog)被求值。
  2.在 h 的函数体中,变量 N 被绑定为值 dog。
  3.求取 N=dog 时 N*10 的值。
             (译注:进行乘法运算的函数)中产生了一个异常。
  4.在函数‘*’
  5.该异常被传播给函数 h。
  6.该异常被函数 g 捕获。
  7.g 返回一个值。
  如果我们仔细观察上面的过程我们就可以发现:       在求值 h(dog)中产生了一个
异常,而该异常在 g 中被捕获并被纠正了。
  在此我们就可以说一个错误确实发生了,但是它被修正了。
  如果我们是直接求值 h(dog),   那么将会产生异常,但是并没有被捕获和修正。

评论

我的评论:

发表评论

请 登录 后发表评论。还没有在Zeuux哲思注册吗?现在 注册 !
刘磊(V.L.)

回复 刘磊(V.L.)  2009年08月19日 星期三 08:18

晕,把简单的问题复杂化,不就是捕获异常并赋值嘛。
最近在写论文? o(∩_∩)o..

2条回复

暂时没有评论

Zeuux © 2024

京ICP备05028076号