返回列表 发帖

防止无限循环(Crystal 语法)

有一个安全机制可以防止因无限循环问题而出现报表处理停顿的情况。在任何一个公式中,每个公式求值最多有 100,000 次循环条件求值。例如:
Local NumberVar i := 1;
While i <= 200000 Do
(
   If i > {movie.STARS} Then
      Exit While;
   i := i + 1
);
20
如果 {电影.明星} 大于 100,000,则循环条件 (i <= 200000) 的求值多于最大次数,从而显示错误信息。否则循环没有问题。
注意   安全机制是针对每个公式的,它并非应用每个循环。例如:
Local NumberVar i := 1;
For i := 1 To 40000 Do
(
   Sin (i);
);
While i <= 70000 Do
(
   i := i + 1;
)
上述公式也会触发安全机制,因为 100,000 是指公式中的循环条件求值总数,而该公式将有 40001 + 70001 次这样的求值。

返回列表