0

我有一个 case 语句,它为结果代码评估整数(函数的结果),如下所示:

  R:= DoSomething;
  case R of
    0: begin
      //Success
    end;
    1..99: begin
      //Specific result messages
    end;
    100..199: begin
      //Other specific result messages
    end;        
    -MAXINT..-1: begin
      //Failure
    end;
  end;

如果失败,则返回表示错误代码的负数。DoSomething只是任何返回整数作为响应代码(或错误代码,为负数)的函数。如果它是一个错误,它会被传递给另一个错误处理程序。如果它是成功的,它会被传递给一个成功处理程序(继续等)。正值将由各种特定的处理程序处理。

我想知道是否有另一种写法-MAXINT..-1。更多类似于“任何 -1 及以下”​​的内容。我试过<=-1了,但编译器不太喜欢。

有没有办法在案例陈述中做到这一点?

4

2 回答 2

5

else块用于所有未处理的结果,并在该块中区分失败的执行和您没有显式处理程序的成功执行(最后一种情况是您在示例代码中似乎没有考虑过的情况)。

  R:= DoSomething;
  case R of
     0: begin
       //Success
     end;
     1: begin
       // Another success
     end
     else begin
        if R >= 0 then 
           // Unhandled successful execution error
        else 
           //Failure
       end;
   end;
于 2013-09-12T01:13:40.403 回答
3

您正在尝试case在应该使用ifand组合的地方强制执行严格的操作case

if R = 0 then
  // Success
else 
  if R < 0 then
    // Failure
  else
  begin  // Positive values
    case R of
       1..99: ...
     100..199: ...
     // Other expected values
     else
       // Unexpected positive value
     end;
  end;

我个人会格式化上述内容以使流程更加清晰,但这是我自己的偏好:

if R = 0 then
  // Success
else if R < 0 then
  // Failure
else
begin  // Positive values
  case R of
     1..99: ...
   100..199: ...
   // Other expected values
   else
     // Unexpected positive value
   end;
end;

或者,更好的是(正如拉里在对我的回答的评论中提到的,但奇怪的是他没有):

if R < 0 then
  // Failure
else
begin
  case R of 
      0:  // Success
      1..99: // Expected positive values
    100..199:
  else
      // Unexpected positives
  end;
end;  
于 2013-09-12T01:37:19.887 回答