Ada 2012 标准 说:
对于赋值语句的执行,首先以任意顺序计算变量名和表达式。
我想知道这个声明的影响力有多大。如果赋值的右侧和左侧都包含子程序调用,这些调用是否可以按任意顺序进行,或者所有左侧将在右侧的所有调用之前/之后进行评估?
例如如果我有
Arr(L1(X), L2(X)) := Arr(R1(Y), R2(Y))
,我可以确定呼叫顺序将是以下之一:
或者左右两边的调用可以混合使用吗,比如:L1,R2,L2,R2?
我对阅读的解释是,它不会混合它们,而是使用上面的 8 个选项之一。但我找不到任何具体的措辞来证实或否认这一点。如果没有其他人能够明确回答,我建议在 Ada Rapporteur Group github 上创建一个问题,并寻求对 ARM 措辞的澄清。您也许可以在那里得到更明确的答案
https://github.com/Ada-Rapporteur-Group/User-Community-Input/issues