繁体   English   中英

“S”的实际值必须是变量

[英]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过程会修改它。 如果更改的声明SRemove_CharacterS: 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM