免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3676 | 回复: 5
打印 上一主题 下一主题

Chain和Chain(e)的区别在哪里? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-07-27 17:13 |只看该作者 |倒序浏览
RT
谢谢各位DX了~~~

论坛徽章:
0
2 [报告]
发表于 2011-07-27 17:44 |只看该作者
chain出错会报,chain(e)不会,要用monitor

论坛徽章:
0
3 [报告]
发表于 2011-07-28 17:27 |只看该作者
回复 2# banym1982


    是Chain(e)会报错吧?

论坛徽章:
0
4 [报告]
发表于 2011-07-29 15:52 |只看该作者
应该是不报错。把错误跳过

论坛徽章:
0
5 [报告]
发表于 2011-07-29 21:03 |只看该作者
chain 如果出错,系统会抛出异常;

chain(e)如果出错,则将错误返回给程序,程序若不处理,则直接跳过。

可用BIF %error 来判断是否出错,例如:

/free
chain(e) keya filea;
if %error;
  // error handling
endif;
/end-free

论坛徽章:
0
6 [报告]
发表于 2011-07-29 21:30 |只看该作者
本帖最后由 jiangyuyun 于 2011-07-29 21:31 编辑
chain出错会报,chain(e)不会,要用monitor
banym1982 发表于 2011-07-27 17:44



如果用monitor on-error的结构,未必能捕获到chain(e)的错误。
例如以下错误,Filea定义了usropn,但程序还未执行open Filea却先执行了chain(e) 1 Filea。此时:
  
fFilea       if   e             disk    usropn   
d a               s              2s 0         
/free                                         
  monitor;                                    
  chain(e) 1 Filea;                             
  if %error ;     
  //  chain(e)产生的错误会在此处被处理                           
  a = a + 1;                                   
  endif ;                                      
  on-error ;
  // chain(e)产生的错误不会在此处被处理,但是如果第一句 a = a + 1出错,此时算数运算的错误控制会跳转到此处处理
  a = a + 1;                                   
  endmon;                                      
  open Filea;                                   
  *inlr=*on;                                   
/end-free                        



如果将程序中的chain(e)改为chain,那么一旦chain出错,才会跳转到on-error后的语句处理。此时,这里的if %error...endif是多余的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP