所以我有一件事。
type Thing is new record
...elements...
end record;
我有一个将其字符串化的函数。
function ToString(t: Thing) returns string;
我希望能够告诉Ada将此功能用于Thing'image
,以便我的图书馆用户不必考虑他们是否使用内置类型或的事情。
然而,明显的语法:
for Thing'image use ToString;
......不起作用。
有办法做到这一点吗?
答案 0 :(得分:6)
我不知道为什么这种语言不支持这一点,我不知道是否有人曾提出过它应该提出的正式提案(Ada问题或AI)。有点相关AI12-0020(Ada 2012的第20个人工智能)包含了这句话"我认为我们不会因为技术原因而拒绝它,而是重视“。
你可以看出为什么Ada报告人组可能会认为这相对不重要:你总是可以声明一个Image
函数;
Pkg.Image (V);
和
Pkg.Typ’Image (V);
不是很大。
答案 1 :(得分:0)
一种常见的方法是创建一元+函数......
function "+"(item : myType) return String;
语法上很轻。 明显的免责声明:应用于数字类型时可能会导致一些歧义(例如Put(+4);)
但是,预构建类型和用户定义类型之间仍然存在区别。 但是,除非您指定了强制执行此功能的界面(如果客户端呼叫' img),那么客户的代码将无法使用img。没有定义&#im;函数的私有类型?)。
如果您最终必须拥有一个界面,那么调用该函数并不重要。