MethodHandles.WhileLoop(MethodHandle, MethodHandle, MethodHandle) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
while从初始值设定项、正文和谓词构造循环。
[Android.Runtime.Register("whileLoop", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)]
public static Java.Lang.Invoke.MethodHandle? WhileLoop(Java.Lang.Invoke.MethodHandle? init, Java.Lang.Invoke.MethodHandle? pred, Java.Lang.Invoke.MethodHandle? body);
[<Android.Runtime.Register("whileLoop", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)>]
static member WhileLoop : Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle -> Java.Lang.Invoke.MethodHandle
参数
- init
- MethodHandle
可选初始值设定项,提供循环变量的初始值。
null可能是,表示默认的初始值。 有关其他约束,请参阅上面。
- pred
- MethodHandle
循环的条件,可能不是 null。 其结果类型必须为 boolean. 有关其他约束,请参阅上面。
- body
- MethodHandle
循环的正文,可能不是 null。 它控制循环参数和结果类型。
有关其他约束,请参阅上面。
返回
实现循环的方法句柄 while ,如参数所述。
- 属性
注解
while从初始值设定项、正文和谓词构造循环。 这是 #loop(MethodHandle[][]]) 泛型循环组合器的便利包装器。
句 pred 柄描述循环条件,以及 body它的正文。 此方法生成的循环将在每个迭代中首先计算谓词,然后执行其主体(如果谓词的计算结果为 true)。 当谓词计算结果为 false (在本例中不会执行正文)后,循环将终止。
句 init 柄描述附加的可选循环局部变量的初始值。 在每个迭代中,此循环局部变量(如果存在)将传递给 body 该变量,并使用从调用返回的值进行更新。 循环执行的结果将是附加循环局部变量的最终值(如果存在)。
这些参数句柄的以下规则保留:<ul><li>句body柄不得null;其类型必须为窗体(V A...)V,其中为V非,否则(A...)void为非void。 (在本void例中,我们将类型void分配给名称V,我们将通过理解从(V A...)V参数列表中悄悄地删除类型voidV,离开 (A...)V。) <li>正文的参数列表(V A...)称为 <em>内部参数列表</em>。 它将约束其他循环部件的参数列表。
<li>如果从内部参数列表中删除迭代变量类型 V ,则生成的较短列表 (A...) 称为 <em>外部参数列表</em>。
<li>正文返回类型 V(如果不是void)确定循环的其他状态变量的类型。 正文必须同时接受并返回此类型的 V值。
<li>如果 init 不是,null则它必须具有返回类型 V。 其参数列表(某种形式的 <c>(A*)</c>) 必须与外部参数列表 (A...)有效相同。
<li>If init is null, the loop variable will initialized to its #empty default value.
<li>句 pred 柄不得 null。 它必须具有 boolean 其返回类型。 其参数列表(空或窗体 (V A*))必须与内部参数列表有效相同。
</ul>
生成的循环句柄的结果类型和参数签名按如下方式确定:<ul<>li>循环句柄的结果类型是正文的结果类型V。
<li>循环句柄的参数类型是外部参数列表中的类型 (A...)。
</ul>
下面是生成的循环句柄的伪代码。 在代码中, V/v 表示唯一循环变量的类型/值以及循环的结果类型;以及 A/a传递给循环的参数的类型/值。
<blockquote>
{@code
V init(A...);
boolean pred(V, A...);
V body(V, A...);
V whileLoop(A... a...) {
V v = init(a...);
while (pred(v, a...)) {
v = body(v, a...);
}
return v;
}
}
</blockquote>
已在 9 中添加。
本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。