gpt4 book ai didi

ada - 通过点运算符调用原始操作失败

转载 作者:行者123 更新时间:2023-12-01 18:51:26 24 4
gpt4 key购买 nike

我无法理解 UFCS(通用函数调用语法)在 Ada 中的工作原理。

假设我有一个类型,例如:

package People
type Person is tagged private;

-- This procedure is a primitive operation:
procedure Say_Name (Person_Object : in Person);
private
type Person is tagged record
Name : String;
end record;
end People;

然后我可以调用该过程,就好像它实际上属于 Person 类型一样:

Some_Person_Instance.Say_Name;

现在可以了,但在我的特定实例中,拥有记录没有意义,子类型就足够了。

subtype Person is String;

此时(假设我更改了程序的工作原理),它无法编译并收到错误:

invalid prefix in selected component "Person".
为什么?即使我这样做也没有帮助:

type Person is new String;

UFCS 只适用于记录吗?

如果这是一个愚蠢的问题,我深表歉意,但我没有 Ada 的学习 Material (除了几本电子书),而且我订购的教科书还没有到。

最佳答案

UFCS 是 full feature of the D language 。由于历史原因,Ada 对语言不同部分的调用采用了混合方法。

普通子程序调用在 ARM 6.4 中处理,看起来像 Subprogram_Name (Parameters)(如果没有参数,则只是 Subprogram_Name)。

protected 子程序调用 ( ARM 9.5.1 ) 和入口调用 ( ARM 9.5.3 ) 类似于 Object.Subprogram_Or_Entry_Name(参数)

但是,标记类型的原始子程序可以通过任何一种方式调用;作为普通调用,或者,如果标记参数是第一个参数,则使用前缀表示法 ( ARM 4.1.3(9.1) )。

AI95-00252中有对此设计的讨论。 ;显然,设计者确实考虑过允许所有类型使用这两种调用形式,但复杂性太多,好处太少。遗憾的是,我想我们都同意这一点,尽管也许这可能太过分了; D 示例(来自 here )

values.multiply(10).divide(3).evens.writeln;

可能就是一个恰当的例子!

<小时/>

关于学习 Ada 和 Web 资源,请查看 Ada Resource Association’s resource list .

关于ada - 通过点运算符调用原始操作失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24790006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com