【发布时间】:2019-09-17 09:22:10
【问题描述】:
我在一个包中有一些方法可以操作一个访问常量到一个标记记录;为了调用这些函数,我必须指定包名。我宁愿只输入变量名 [dot] 函数名,但这会产生错误:no selector "foo" for type "Color"。这是为什么呢?
这是一个最小的复制器:
procedure Main is
type Color is tagged
record
Hue : Integer;
Saturation : Integer;
Value : Integer;
end record;
type AccessColor is access constant Color;
procedure foo (C : in AccessColor) is
begin
null;
end foo;
AccessS : AccessColor;
begin
foo (AccessS);
--AccessS.foo; -- does not work. Why?
end Main;
请注意,在我的真实代码中,完全指定函数是不方便的,因为与上面的示例不同,foo 是在单独的包中定义的:
Some.Package.Name.Depp.foo(AccessS);
尽管 AccessS 已经指定了在哪里找到该函数,所以我应该能够做到:
AccessS.foo;
【问题讨论】:
-
请注意:标记类型的对象始终通过引用传递,因此如果您的目标是避免复制对象,则无需在访问类型上定义
foo。也可以使用in Color来获得相同的结果。 -
为什么要使用访问类型?他们几乎从来不需要。当然,这似乎不需要它们。
标签: ada