2

我有

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

有人可以告诉我如何解决这个问题吗?错误是针对

结果:=真;

4

3 回答 3

5

正如其他人告诉您的那样,您的循环分配给的值将Result被丢弃,因为您在最终分配给之前没有退出函数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;
于 2013-10-02T01:03:43.653 回答
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;
于 2013-10-02T00:58:21.920 回答
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);替换为。

于 2013-10-02T00:58:48.047 回答