似乎我无法将记录字段作为参数?
joueurActuel.c1 := predColonne(joueurActuel.c1);
功能:
function predColonne (c : T_Colonne) return T_Colonne;
其中T_Colonne
是Positive
的子类型。
joueurActuel
是包含上述作业的函数的in
参数(joueurActuel : in T_Joueur;
)。 T_Joueur
是一张唱片。
答案 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建议的局部变量,并且仅修改本地副本将起作用。