在Ada(2005或2012)中实现相当于java finalize块的最佳实践
发布时间:2020-05-24 09:11:59 所属栏目: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; (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
