为什么Ada编译器会通过范围违规?它确实给出了警告,但是如果它在任何情况下都是错误的话,为什么它会通过呢?是否存在实际情况,这是一种有用的行为?
最重要的是:为什么类型声明是运行时实体?我的意思是代码示例的第3行是我希望提前评估的东西.我以为只有第5行才能"成为"可执行文件.为什么不?这有用吗?我在这里遗漏或误解了什么吗?
with Ada.Text_IO;
procedure question is
subtype Test is Natural range -1 .. 10;
begin
Ada.Text_IO.Put_Line ("foobar");
end;
Run Code Online (Sandbox Code Playgroud)
注意:结果与"类型测试是新的自然范围-1..10;"相同
注意:GNAT 4.6
我想声明Ada中记录类型的速度范围。以下内容不起作用,但是有办法使其起作用吗?
--Speed in knots, range 0 to unlimited
Speed : float Range 0.0 .. unlimited ;
Run Code Online (Sandbox Code Playgroud)
我只想要这个数字为零正值...
在Ada,我经常看到这样的事情:
type Number is new Integer;
Run Code Online (Sandbox Code Playgroud)
这有什么意义?你能不能满意Integer吗?我也见过如下代码:
type Small_Number is range 1..5;
Run Code Online (Sandbox Code Playgroud)
这对我来说很有意义; 我明白为什么这会有用.但是,为什么,无论如何你会选择使用前一个例子?
我试图想出一个很好的例子,详细说明了Ada的严格打字和Java的强类型之间的区别.有没有人有一个很好的例子来确定使用基于整数的值的类型转换中的这些差异?
我正在尝试使用Integer'Value将字符串转换为Integer。这对于文件的第一个循环工作正常,但是之后我得到了一个错误的'value输入(提高了Constraint_Error。我希望有人可以向我展示我的方式的错误,以便可以将字符串转换为整数)。每个循环。
WITH Ada.Text_IO, Ada.Integer_Text_IO;
USE Ada.Text_IO, Ada.Integer_Text_IO;
PROCEDURE Isbntest IS
FUNCTION Strip(The_String: String; The_Characters: String)
RETURN String IS
Keep: ARRAY (Character) OF Boolean := (OTHERS => True);
Result: String(The_String'RANGE);
Last: Natural := Result'First-1;
BEGIN
FOR I IN The_Characters'Range LOOP
Keep(The_Characters(I)) := False;
END LOOP;
FOR J IN The_String'RANGE LOOP
IF Keep(The_String(J)) THEN
Last := Last+1;
Result(Last) := The_String(J);
END IF;
END LOOP;
RETURN Result(Result'First .. Last);
END Strip;
Input: File_Type := Ada.Text_IO.Standard_Input;
BEGIN
WHILE NOT End_of_File(Input) LOOP
DECLARE
Line : …Run Code Online (Sandbox Code Playgroud)