簡體   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