我有
playerIds : Array[0..500] of string;
function isPlayerMob(check : string): boolean;
var
i : integer;
begin
for i := 0 to 500 do
begin
if ((playerIds[i] <> '') and (playerIds[i] = check)) then
begin
result := true;
end;
end;
result := false;
end;
我收到警告
Hint: Value assigned to 'isPlayerMob' never used
有人能告诉我如何解决这个问题吗?
的错误结果:= true;
答案 0 :(得分:4)
此提示是因为您始终将false
值分配给该函数。无论是否在循环中找到该值。
试试这个
function isPlayerMob(const check : string): boolean;
var
i : integer;
begin
result := false;
for i := 0 to 500 do
if ((playerIds[i] <> '') and (playerIds[i] = check)) then
begin
result := true;
break;
end;
end;
答案 1 :(得分:4)
正如其他人告诉你的那样,你的循环分配给Result
的值被丢弃了,因为你没有在最终赋值给Result
之前退出函数,所以循环无关紧要分配
您可以为结果分配初始值,然后根据需要重新分配,或者在分配了所需的值后,只需Exit
即可:
function isPlayerMob(check : string): boolean;
var
i : integer;
begin
for i := 0 to 500 do
begin
if ((playerIds[i] <> '') and (playerIds[i] = check)) then
begin
Result := True;
Exit; // <-- add this
end;
end;
Result := False; // <-- only performed if the loop does not find a match
end;
或者,如果您使用的是最近的Delphi版本:
function isPlayerMob(check : string): boolean;
var
i : integer;
begin
for i := 0 to 500 do
begin
if ((playerIds[i] <> '') and (playerIds[i] = check)) then
Exit(True); // <-- sets Result and exits at the same time
end;
Result := False; // <-- only performed if the loop does not find a match
end;
答案 2 :(得分:2)
写入的函数将始终执行最后的Result := false;
行,因此循环内分配的值将始终被丢弃。
更改您的功能,而不是首先初始化结果:
function isPlayerMob(check : string): boolean;
var
i : integer;
begin
Result := false;
for i := 0 to 500 do
begin
if ((playerIds[i] <> '') and (playerIds[i] = check)) then
begin
Result := true;
Exit;
end;
end;
end;
在Delphi 2009及更高版本中,Result := True; Exit;
行可以简单地替换为Exit(True);
。