首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dec Ada & exception

Dec Ada & exception
EN

Stack Overflow用户
提问于 2017-01-13 09:22:28
回答 1查看 117关注 0票数 0

我把这个代码放在一个模块中:

代码语言:javascript
复制
PROCEDURE Get (File: IN Ada.Text_IO.File_Type; Item : OUT Rational) IS

N: Integer;
D: Integer;
Dummy: Character;  

BEGIN -- Get
LOOP
BEGIN
  Ada.Integer_Text_IO.Get(File => File, Item => N);
  Ada.Text_IO.Get  (File => File, Item => Dummy);
  Ada.Integer_Text_IO.Get(File => File, Item => D);
  Item := N/D;
  if Dummy /= '/' then
   ........;
  end if;

EXIT;

EXCEPTION
     when other =>
          Ada.Text_IO.Put_Line(" here is exception ");
END;
END LOOP;
END Get;

与第二个代码有什么不同。

我的主要问题是,如果我不把,举起作为异常声明,会发生什么?

代码语言:javascript
复制
PROCEDURE Get (File: IN Ada.Text_IO.File_Type; Item : OUT Rational) IS

N: Integer;
D: Integer;
Dummy: Character;  

BEGIN -- Get
LOOP
BEGIN
  Ada.Integer_Text_IO.Get(File => File, Item => N);
  Ada.Text_IO.Get  (File => File, Item => Dummy);
  Ada.Integer_Text_IO.Get(File => File, Item => D);
  Item := N/D;
  if Dummy /= '/' then
    ........;
  end if;

EXIT;

EXCEPTION
     when other =>
          Ada.Text_IO.Put_Line(" here is exception ");
    **raise;**
END;
END LOOP;
END Get;

我的主要问题是,如果我不把在异常声明中添加,会发生什么?

非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2017-01-16 12:56:26

这两个代码模块之间唯一的区别是异常(如果有异常在Get执行期间引发)被重新分配,即异常被传播到Get的调用方。

这是否是想要的行为取决于您的需求,即调用方是否需要知道是否发生了异常?

在您的示例中,可能会出现几种异常。

  • 没有读取正确/预期的输入(要读取的文件不以数字开头)
  • 试图从尚未打开的文件中读取
  • 将D读为0(从而导致除以0)

所有这些都是通过打印“这里是异常”来以相同的方式处理的。Get的第一个实现然后悄悄地将控制返回给调用者(调用者不会知道发生了什么奇怪的事情)。然而,第二个实现将通过重新定义异常通知调用方。

有关更多信息,见Ada LRM第11.3节(提出声明)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41631163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档