我正在努力学习阿达,这让我感到惊讶。
该计划的输出:
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
procedure Main is
function lstrip(S: String) return String is
begin
return S(S'First+1 .. S'Last);
end;
function "&"(Left: String; Right: Integer) return String is
begin
return Left & lstrip(Integer'Image(Right));
end "&";
function "&"(Left: Integer; Right: String) return String is
begin
return lstrip(Integer'Image(Left)) & Right;
end "&";
begin
Put_Line("Integer'First=" & Integer'First);
Put_Line("Integer'Last=" & Integer'Last);
end Main;
这是:
Integer'First=2147483648
Integer'Last=2147483647
但为什么Integer'First
大于Integer'Last
?我希望它是一个负数。
答案 0 :(得分:4)
为什么第一个整数是2147483648?
不是。
您的lstrip
函数会删除其参数的第一个字符。
Integer'Image(Integer'First)
返回"-2147483648"
。您的lstrip
功能会将其更改为"2147483648"
。
看起来你正试图删除Integer'Image
添加的领先空间(我总是发现自己烦恼)。但Integer'Image
仅为非负数增加了领先空间。试试这个版本的lstrip
:
function lstrip(S: String) return String is
begin
if S(S'First) = ' ' then
return S(S'First+1 .. S'Last);
else
return S;
end if;
end;
请注意,-2147483648
是Integer'First
的一个非常常见的值,但标准只保证它不超过-32767
。