我目前正在通过John English'"Ada 95: The Craft of Object-Oriented Programming"工作 . 我在task 5.1:
编写一个程序来玩一个简单的猜谜游戏 . 定义一个值范围为1到1000的整数类型,并将一个秘密值声明为此类型的常量,然后为用户提供十次猜测其值的机会 .
我写的(作为存根)现在是
procedure je_5_1 is
type guess_value is new Integer range 1..1000;
secret : guess_value;
package random_guess_value is new Ada.Numerics.Discrete_Random(guess_value);
Gen : random_guess_value.Generator;
begin
random_guess_value.Reset(Gen);
secret := random_guess_value.Random(Gen);
end je_5_1;
显然这没有实现 declare a secret value as a constant
的要求 . 但是因为在我可以将随机生成的值分配给 secret
之前我必须调用 Reset(Gen)
,所以我无法在 begin
之前将变量 secret
定义为常量 .
是否仍然可以将 secret
定义为随机常量?
3 回答
使用“声明”打开新范围 . 例如:
我认为文本所说的是你应该在编写代码时选择秘密值并将其“硬编码”插入源代码中 .
您可以在主过程的声明部分内创建另一个返回随机数的过程 .
exercise后来建议你"Modify the program so that the value to be guessed is chosen at random each time the program is run."这要求在 Build 秘密值之前初始化Generator . 一种方法是将秘密值封装在Abstract State Machine中,如图所示here . 在下面的示例中,
Generator
的一个实例是Reset
,用于在详细描述包时执行的语句序列中初始化Secret
,如here和here所述 .鉴于已经猜到了
Value
,您可以根据程序的要求Check
.