我在想,根据它的名字逻辑上,这个函数将返回第一个字符的索引,而不是空格,也就是说,不是空格或制表。
但是,在对某些字符串进行测试时,以及查看其实现时(文件 a-strsea.adb 为GNAT 4.7.4
),我意识到这个函数实际上返回了第一个字符的索引不是普通空格(ASCII 32
)。在我看来,这与其名称可以设想的内容不一致。
那么,我在哪里可以找到这个函数的预期行为(除了查看代码)?实际上,在AARM
Ada 2012
中,我只找到了原型,没有任何语义信息。
答案 0 :(得分:6)
我同意使用“空白”这个词是不合适的。在其他地方,标准将“空白”定义为“空格或水平制表字符”。
AARM确实定义了Ada.Strings.Fixed.Index_Non_Blank
:
function Index_Non_Blank (Source : in String;
From : in Positive;
Going : in Direction := Forward)
return Natural;
返回
Index (Source, Maps.To_Set(Space), From, Outside, Going);
function Index_Non_Blank (Source : in String;
Going : in Direction := Forward)
return Natural;
返回
Index(Source, Maps.To_Set(Space), Outside, Going)
其中Space
为Ada.Characters.Latin_1.Space
,定义为' '
。
标准显示没有评论的Ada.Strings.Fixed
索引的规范,然后是声明的子程序的效果描述,这可能会令人困惑。只需在文档中搜索Index_Non_Blank
,并且不要假设有关它的所有信息都在一个地方。