Syntax 定制&x27;Ada中的图像属性?

Syntax 定制&x27;Ada中的图像属性?,syntax,attributes,ada,Syntax,Attributes,Ada,所以我有一件事 type Thing is new record ...elements... end record; 我有一个函数将其字符串化 function ToString(t: Thing) returns string; 我希望能够告诉Ada将此函数用于Thing'image,这样我的库的用户就不必考虑他们使用的是内置类型还是其他类型 但是,显而易见的语法是: for Thing'image use ToString; …不起作用 有办法做到这一点吗?我不知道为什么语言不支

所以我有一件事

type Thing is new record
  ...elements...
end record;
我有一个函数将其字符串化

function ToString(t: Thing) returns string;
我希望能够告诉Ada将此函数用于
Thing'image
,这样我的库的用户就不必考虑他们使用的是内置类型还是其他类型

但是,显而易见的语法是:

for Thing'image use ToString;
…不起作用


有办法做到这一点吗?

我不知道为什么语言不支持这一点,我也不知道是否有人提出过正式的建议(Ada问题或AI)。有点相关的(Ada 2012的第20个AI)包括这样一句话:“我不认为我们拒绝它是出于技术原因,而不是出于重要性。”

您可以看到为什么Ada Reporter小组可能认为这相对不重要:您总是可以声明一个
Image
函数;它们之间的区别是

Pkg.Image (V);


不是很大。

一种常用的方法是创建一元+函数

    function "+"(item : myType) return String;
这在句法上很轻。 明显的免责声明:当应用于数字类型时,可能会导致一些歧义(例如Put(+4);)

但是,预构建类型和用户定义类型之间仍然存在区别。 “但是,除非您指定了一个实现此函数的接口,否则您的客户端代码将无法使用img(如果客户端为未定义“img函数”的私有类型调用“img”,该怎么办?)


如果你最终不得不拥有一个接口,那么调用什么函数真的无关紧要。

这太可惜了。这是一种令人恼火的不一致性,否则它就是一种令人钦佩的一致性语言——用户定义的类型不应该是一种体面的编程语言中的二级结构。(另外,我的程序与GNAT绑定,因此能够执行
V'img
将非常有用。)我倾向于使用通用软件包创建签名[type+image function],然后以这种方式访问image函数。(这允许根据实例化调用不同的to_字符串函数,即调试_字符串函数或简单to_字符串函数。)事实上,我最后做的是重载
&
,这样我就可以无缝地将我的对象附加到字符串中。因为我在向用户生成消息时最想这样做,这就满足了我的大多数目的。不过,这不是一个真正的解决方案。
    function "+"(item : myType) return String;