有没有一组通用规则/准则,可以帮助理解何时更喜欢使用
如果我想彻底而不完全理解其中的“原因”,我可以简单地尝试:
pragma Pure
、pragma Preelaborate
或其他完全不同的内容?在标准(Ada 2012)中呈现的规则和定义有点晦涩难懂,我很感激能读到一些更加清晰且针对平均情况的东西。如果我想彻底而不完全理解其中的“原因”,我可以简单地尝试:
- 使用
pragma Pure;
标记包规范; - 如果它不能编译,请尝试使用
pragma Preelaborate;
- 如果失败,则我做了一些棘手的事情,需要逐个
with
-by-with
基础上考虑对pragma Elaborate
单位进行标记,或者重新思考包布局。
Pure
的行为,关于子程序不产生副作用的要求,它只适用于函数
还是也影响过程
?而且所谓的副作用,是指局部于包内吗?例如,一个接受not null access Root_Stream_Type'Class
的流程过程;显然,该过程会改变流程,那么即使流程是从其他地方传入的,这是否意味着该包不是 Pure 的? - AnthonyRoot_Stream_Type
受限,因此将其作为参数的子程序调用可能不可省略。我在我的答案中添加了 ARM 的相关部分。但从概念上讲,它确实涉及到与包本地和其依赖包相关的副作用。 - flyx