【发布时间】:2019-09-20 12:31:49
【问题描述】:
所以我们知道 Ada 支持这样的默认参数
procedure Example(param1 : Integer := 1);
但我的问题是,默认参数在哪里评估?在我熟悉的所有语言中,默认参数只是插入到调用代码中,如果更改默认参数,则需要下游重新编译。 Ada 是否使用相同的方法?
我尝试搜索 ARM 2012,但在整个文档的任何地方都找不到“默认参数”。因此,我检查了 6.4 和 6.4.1,似乎 ARM 将相关部分称为“默认表达式”。然而,“默认表达式”链接到 3.7 判别式。这可能被用来减少定义某些东西的次数,但是如果这对两个概念是共同的,他们应该做程序员所做的事情并分别定义它;这个跳转很混乱,看起来像是一个错误。
注释 59 内容如下:
当创建该类型的无约束子类型的对象时,会评估该类型判别式的 default_expression。
好吧,这对于子例程调用没有任何意义。
同样,子例程的“默认表达式”何时真正被评估?
【问题讨论】: