[英]Ada actual for “S” must be a variable
所以这是我的身体文件的一部分。 我收到错误“words.adb:75:42:实际为”S“必须是变量”。
procedure Remove_Character(S : in out Ustring; C : in Character; Successful : out Boolean) is
begin
for I in 1..length(S) loop
if Element(S, I) = C then
Delete(S, I, I);
Successful := true;
return;
end if;
end loop;
Successful := false;
end Remove_Character;
function Is_Subset(Subset : Ustring; S : Ustring) return Boolean is
Could_Remove : Boolean;
begin
for I in 1..length(Subset) loop
Remove_Character(S , Element(Subset, I), Could_Remove);
if Could_Remove = false then
return false;
end if;
end loop;
return True;
end Is_Subset;
我理解我的错误来自哪里。 Remove_Character在Ustring中使用S:而函数Is_Subset在Ustring中使用S:。 我的问题是如何将变量从Remove_Character更改为仅在Ustring中? 对不起,如果这有点混乱,我对编程和网站都很新。
你不能,至少不是直接的。
我不知道UString
是什么,但我认为Delete
过程会修改它。 如果更改的声明S
在Remove_Character
到S: in Ustring
,你会得到大概的调用上的错误Delete
。
我能想到的最简单的方法是在Is_Subset
复制S
:
Copy_Of_S: UString := S;
然后将(可修改的)副本传递给Remove_Character
。
“最简单”,我的意思是它对现有代码进行了最小的更改。 但你应该考虑重新组织它。 通过修改其中一个字符串来确定一个UString是否是另一个UString的子集似乎不是最好的方法; 我确信有一种更有效的方法。
一个次要而无关紧要的观点:这个:
if Could_Remove = false then
写得更好:
if not Could_Remove then
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.