在Ada(2005或2012)中实现相当于java finalize块的最佳实践
发布时间:2020-12-15 01:00:03 所属栏目:Java 来源:网络整理
导读:Java具有finalize块,允许在块之后执行一些语句 保留(即使引发异常也会执行).例: try { ...} catch (Exception e) { ...} finally { ... // any code here} Ada具有允许实现Finalize操作的受控对象 但是没有与java中相同的finalize块.这对于日志记录非常有用
Java具有finalize块,允许在块之后执行一些语句
保留(即使引发异常也会执行).例: try { ... } catch (Exception e) { ... } finally { ... // any code here } Ada具有允许实现Finalize操作的受控对象 >你将如何在Ada 2005中实现这样的终结块(同时保持代码可读)? 解决方法
我相信这段代码会按照你的要求行事;它成功打印出目前加注或返回的42.这是T.E.D建议的实施.
在Mac OS X,Darwin 10.6.0上使用GCC 4.5.0进行测试. with Ada.Finalization; package Finally is -- Calls Callee on deletion. type Caller (Callee : not null access procedure) is new Ada.Finalization.Limited_Controlled with private; private type Caller (Callee : not null access procedure) is new Ada.Finalization.Limited_Controlled with null record; procedure Finalize (Object : in out Caller); end Finally; package body Finally is procedure Finalize (Object : in out Caller) is begin Object.Callee.all; end Finalize; end Finally; with Ada.Text_IO; use Ada.Text_IO; with Finally; procedure Finally_Demo is begin declare X : Integer := 21; -- The cleanup procedure,to be executed when this block is left procedure F is begin Put_Line ("X is " & Integer'Image (X)); end F; -- The controlled object,whose deletion will execute F F_Caller : Finally.Caller (F'Access); begin X := 42; raise Constraint_Error; end; end Finally_Demo; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |