Delphi布尔返回函数提示:赋值为''从未使用过?

时间:2013-10-02 00:56:03

标签: arrays delphi function boolean

我有

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;

3 个答案:

答案 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);