分配给" in"模式参数不允许

时间:2015-04-24 11:22:49

标签: function record ada

似乎我无法将记录字段作为参数?

joueurActuel.c1 := predColonne(joueurActuel.c1);

功能:

function predColonne (c : T_Colonne) return T_Colonne;

其中T_ColonnePositive的子类型。

joueurActuel是包含上述作业的函数的in参数(joueurActuel : in T_Joueur;)。 T_Joueur是一张唱片。

2 个答案:

答案 0 :(得分:5)

这是设计的。模式in的形式参数是常量视图;它无法在子程序体内更新。常量不能是赋值操作的目标。见section 3.3 od Ada Reference Manual,特别是第13,15,17和25段。

因此,您必须将predColonne(joueurActuel.c1)的结果存储在本地变量中,或者如果从业务逻辑的角度来看它是正确的,则将joueurActuel更改为in out参数。< / p>

答案 1 :(得分:5)

in中的joueurActuel : in T_Joueur;模式是您向编译器提供的保证,您不会在声明此形式参数的过程中以任何方式更新或修改joueurActuel。它记录的事实与问题无关。

尽管有保证,

joueurActuel.c1 := predColonne(joueurActuel.c1);仍尝试修改joueurActuel

编译器正确拒绝它。

如果这是你想要做的,那么模式in out将允许它,但首先要问自己它有更好的设计。程序的其余部分是否需要查看更改?如果是,那么in out是可以接受的。否则,将其复制到Ondrej建议的局部变量,并且仅修改本地副本将起作用。