【发布时间】:2015-10-13 00:54:56
【问题描述】:
我正在研究 Ada,因为我对严格类型安全和编程合同的想法很感兴趣。 “永远编程”的想法很好。无论如何,真正的问题是 Ada 是否具有可变参数功能。在 SO suggests 上搜索 Ada 没有,正确的方法是使用一个不受约束的数组,其长度在运行时确定。
那么我的问题不是你是怎么做的,而是正确做的惯例是什么?
此外,为什么 Ada 可以执行(似乎是基于堆栈的)操作,如 +(例如 1+2+3),但它不能对函数调用的参数执行相同的操作?
完全不做可变参数表达式是否更惯用,例如
Max(1, 2, 3, ..., n),或者只是你应该像Args.len=n; Max(Args[])一样将参数传递给它?
我的直觉以及从阅读各种 Ada 书籍中收集到的信息表明,您不应该使用不特定的功能,因为它们不太安全。
【问题讨论】:
-
我不明白关于
1+2+3的部分。首先,它没有任何基于堆栈的东西。通常,如果参数是变量,它会将寄存器添加在一起并将结果放入另一个寄存器,并且它不会靠近堆栈。其次,您的问题似乎暗示+有一些“变量”,但没有。"+"是一个接受两个参数的函数,句号。您想添加更多数字,您必须多次调用该函数。您可以使用 Ada 中的任何其他功能 (Func(a,Func(b,Func(c,...))))。 -
我明白为什么会令人困惑。我也看到了我的逻辑不正确的地方。在我上学时,我被告知大多数计算器使用堆栈进行计算,而在深夜,我提出的问题更有意义。