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

Spo*_*oky 2 function record ada

看来我不能把记录字段作为参数?

joueurActuel.c1 := predColonne(joueurActuel.c1);
Run Code Online (Sandbox Code Playgroud)

功能:

function predColonne (c : T_Colonne) return T_Colonne;
Run Code Online (Sandbox Code Playgroud)

哪个T_Colonne是子类型Positive.

joueurActuel是包含上述赋值的函数的in参数(joueurActuel : in T_Joueur;).T_Joueur是一个记录.

Ond*_*cny 5

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

因此,要么必须将结果存储predColonne(joueurActuel.c1)在局部变量中,要么从业务逻辑的角度来看,如果它是正确的,则更joueurActuel改为in out参数.


Bri*_*ond 5

in以模式joueurActuel : in T_Joueur;为你所赐给你将不会更新或修改编译器保证joueurActuel在你宣布这个正式参数的过程中的任何方式.它是一个记录的事实与问题无关.

joueurActuel.c1 := predColonne(joueurActuel.c1);joueurActuel尽管有保证,但仍试图修改.

编译器正确地拒绝它.

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