While

条件为真时,重复逻辑并返回结果。

格式 

While([初始变量];条件;[逻辑];结果)

参数 

初始变量 - 可用于下列参数的变量定义。

条件 - 每次循环迭代前解析的布尔值表达式。如果为真(True),则循环重复。如果为假(False),则循环停止。

逻辑 - 每次循环重复时解析的变量定义。

结果 - 循环停止时返回的表达式。

返回的数据类型 

文本、数值、日期、时间、时间戳、容器

原始版本 

18.0

说明 

While 函数执行下列步骤:

  1. 解析初始变量参数。

  2. 解析条件参数。

  3. 如果条件为:

    • 真(任意非零数字结果),解析逻辑,然后重复步骤 2。

    • 假(0),停止循环并返回“结果”。

您可以用方括号 [ ] 将初始变量逻辑括起来并用分号进行分隔,来指定多个变量定义。例如:

复制
While ( 
    [ 初始变量1 = 值1 ; 初始变量2 = 值2 ; ...]; 
    条件 ; 
    [ 逻辑变量1 = 表达式1 ; 逻辑变量2 = 表达式2 ; ...]; 
    结果 
)

初始变量逻辑参数中指定的变量从左向右解析。这些变量处在同一范围内,可用于条件结果参数。请参阅使用变量

必须初始化需要将信息从一个循环迭代保留到下一个的变量,然后用在逻辑参数中。否则,将删除这些值。

注释 

  • 为防止导致 FileMaker 客户端停止响应的无限循环,如果循环迭代次数超过限制,此函数将返回"?"。要设置限制,请使用 SetRecursion 函数

示例 1 

返回 5 的 3 次幂结果。Let 语句建立初始 5 和 3 次。算式循环多次,直到获得结果 5 * 5 * 5 = 125

复制
Let (
    [
        值 = 5 ;
        幂 = 3
    ] ;
    While (
        [ 结果 = 值 ; i = 1 ] ;
        i < 幂 ;
        [ i = i + 1 ; 结果 = 结果 * 值 ] ;
        结果
    )
)

示例 2 

总计重复变量 $a 的值。每个循环迭代递增计数,用它来指定 $a 的重复变量,并添加值运行总计。本例返回“150”。

复制
While ( 
    [ 
        计数 = 0 ; 
        总计 = 0 ; 
        $a[1] = 25 ; 
        $a[2] = 50 ; 
        $a[3] = 75 
    ] ; 
    计数 < 3 ; 
    [
        计数 = 计数 + 1 ; 
        总计 = 总计 + $a[计数]
    ] ;
    总计
)

示例 3 

在两个文本值之间增加 5 个句点。While 函数中的城市函数变量不同于 Let 函数,所以本例返回“旧金山.....巴黎”。

复制
Let (
    城市 = "巴黎";
    While ( 
        [ 城市 = "旧金山"; i = 0 ] ; 
        i < 5 ;
        [
            i = i + 1 ;
            城市 = 城市 & "."
        ] ; 
        城市
    )
& 城市 )

如果每个函数变量城市被局部变量 $城市所替代,则本例返回旧金山.....旧金山.....,因为 $城市在整个计算中具有同一范围。

示例 4 

说明在 While 循环之前定义函数变量的范围与在 While 循环的初始变量逻辑参数中定义它们时的差异。

在 While 循环之前定义的 it1it2 的值在循环中可用,但是循环中对 it1it2 的更改不会影响循环之后这些变量的值。本例还说明了在每次循环迭代后,逻辑参数中定义的 it2 变量的值 2 如何丢失,因为 it2 未在初始变量参数中初始化。

复制
Let (
    [ // Before While loop; sets line 1.0 of result
        it1 = "a"; // Defined in Let's scope
        it2 = 1; // Defined in Let's scope
        out = "1.0 " & it1 & " " & it2 & ¶
    ];
    While
    (
        [ // initialVariables; sets lines 2.0 and 3.0 of result
            i = 0; 
            out = out & "2.0 " & it1 & " " & it2 & ¶;
            it1 = "b"; // Defined in While's scope
            out = out & "3.0 " & it1 & " " & it2 & ¶
        ];
        // Condition 
        i < 2;
        [ // logic; sets lines 4.x and 5.x of result
        // Variables defined in the logic parameter in previous passes
        // through the loop are deleted at this point
            i = i + 1; 
            out = out & "4." & i & " " & it1 & " " & it2 & ¶;
            it1 = "c"; // Reused in While's scope
            it2 = 2; // Redefined in While's scope
            out = out & "5." & i & " " & it1 & " " & it2 & ¶
        ];
        // result; sets line 6.0 of result
        out & "6.0 " & it1 & " " & it2 & ¶
    )
    // After While loop; sets line 7.0 of result
    & "7.0 " & it1 & " " & it2 & ¶
)

结果是:

1.0 a 1
2.0 a 1
3.0 b 1
4.1 b 1
5.1 c 2
4.2 c 1
5.2 c 2
6.0 c 2
7.0 a 1