MethodHandles.CountedLoop 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
重载
| 名称 | 说明 |
|---|---|
| CountedLoop(MethodHandle, MethodHandle, MethodHandle, MethodHandle) |
构造一个循环,该循环计数超过一系列数字。 |
| CountedLoop(MethodHandle, MethodHandle, MethodHandle) |
构造运行给定迭代数的循环。 |
CountedLoop(MethodHandle, MethodHandle, MethodHandle, MethodHandle)
构造一个循环,该循环计数超过一系列数字。
[Android.Runtime.Register("countedLoop", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)]
public static Java.Lang.Invoke.MethodHandle? CountedLoop(Java.Lang.Invoke.MethodHandle? start, Java.Lang.Invoke.MethodHandle? end, Java.Lang.Invoke.MethodHandle? init, Java.Lang.Invoke.MethodHandle? body);
[<Android.Runtime.Register("countedLoop", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)>]
static member CountedLoop : Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle -> Java.Lang.Invoke.MethodHandle
参数
- start
- MethodHandle
一个非null 句柄,用于返回循环计数器的起始值,必须是 int。
有关其他约束,请参阅上面。
- end
- MethodHandle
一个非null 句柄,用于返回循环计数器的结束值(循环将运行到 end-1)。 结果类型必须是 int。 有关其他约束,请参阅上面。
- init
- MethodHandle
可选初始值设定项,提供循环变量的初始值。
null可能是,表示默认的初始值。 有关其他约束,请参阅上面。
- body
- MethodHandle
循环的正文,可能不是 null。
它控制标准事例中的循环参数和结果类型(有关详细信息,请参阅上文)。
它必须接受自己的返回类型(如果非 void)加上参数 int (对于计数器),并且可以接受任意数量的附加类型。
有关其他约束,请参阅上面。
返回
表示循环的方法句柄。
- 属性
注解
构造一个循环,该循环计数超过一系列数字。 这是 #loop(MethodHandle[][]]) 泛型循环组合器的便利包装器。
循环计数器 i 是类型的 int循环迭代变量。 和startend句柄确定循环计数器的开始(非独占)值和结束值。 循环计数器将初始化为 int 从句柄计算 start 返回的值,并运行到从 end (独占) 返回的值,步骤宽度为 1。
body如果句柄返回非void类型V,该类型的前导循环迭代变量也存在。 此变量是使用可选 init 句柄初始化的,或者对于类型 #empty 默认值 V (如果该句柄为 null)。
在每个迭代中,迭代变量将传递给句柄的 body 调用。 从正文(类型)void返回的非V值会更新前导迭代变量。 循环句柄执行的结果将是该变量的最终V值(如果没有voidV变量)。
参数句柄的以下规则保留:<ul><li >start和end句柄不得null,并且必须同时返回通用类型,此处int称为参数类型I列表中。
<li>句body柄不能null;其类型必须为窗体(V I A...)V,其中V为非,否则void为 <void例中,我们将类型void分配给名称V,我们将通过理解从(V I A...)V参数列表中悄悄地删除类型voidV,离开 (I A...)V。) <li>正文的参数列表(V I A...)有助于名为 <em>内部参数列表/em< 的类型列表>。 它将约束其他循环部件的参数列表。
<li>作为一种特殊情况,如果正文只V贡献和I类型,且没有其他A类型,则内部参数列表由句柄的参数A...类型end扩展。
<li>如果从内部参数列表中删除迭代变量类型 (V I) ,则生成的较短列表 (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>(某种形式start)的参数列表(A*)必须与外部参数列表(A...)有效相同。
<li>同样,参数列表 end 必须与外部参数列表有效相同。
</ul>
生成的循环句柄的结果类型和参数签名按如下方式确定:<ul><li>循环句柄的结果类型是正文的结果类型V。
<li>循环句柄的参数类型是外部参数列表中的类型 (A...)。
</ul>
下面是生成的循环句柄的伪代码。 在代码中, V/v 表示第二循环变量的类型/值以及循环的结果类型;并 A.../a... 表示传递给循环的参数。
<blockquote>
{@code
int start(A...);
int end(A...);
V init(A...);
V body(V, int, A...);
V countedLoop(A... a...) {
int e = end(a...);
int s = start(a...);
V v = init(a...);
for (int i = s; i < e; ++i) {
v = body(v, i, a...);
}
return v;
}
}
</blockquote>
已在 9 中添加。
本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。
适用于
CountedLoop(MethodHandle, MethodHandle, MethodHandle)
构造运行给定迭代数的循环。
[Android.Runtime.Register("countedLoop", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)]
public static Java.Lang.Invoke.MethodHandle? CountedLoop(Java.Lang.Invoke.MethodHandle? iterations, Java.Lang.Invoke.MethodHandle? init, Java.Lang.Invoke.MethodHandle? body);
[<Android.Runtime.Register("countedLoop", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)>]
static member CountedLoop : Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle -> Java.Lang.Invoke.MethodHandle
参数
- iterations
- MethodHandle
一个非null 句柄,用于返回此循环应运行的迭代数。 句柄的结果类型必须是 int。 有关其他约束,请参阅上面。
- init
- MethodHandle
可选初始值设定项,提供循环变量的初始值。
null可能是,表示默认的初始值。 有关其他约束,请参阅上面。
- body
- MethodHandle
循环的正文,可能不是 null。
它控制标准事例中的循环参数和结果类型(有关详细信息,请参阅上文)。
它必须接受自己的返回类型(如果非 void)加上参数 int (对于计数器),并且可以接受任意数量的附加类型。
有关其他约束,请参阅上面。
返回
表示循环的方法句柄。
- 属性
注解
构造运行给定迭代数的循环。 这是 #loop(MethodHandle[][]]) 泛型循环组合器的便利包装器。
迭代数由 iterations 句柄评估结果确定。 循环计数器 i 是类型 int的额外循环迭代变量。 它将初始化为 0,并在每次迭代中递增 1。
body如果句柄返回非void类型V,该类型的前导循环迭代变量也存在。 此变量是使用可选 init 句柄初始化的,或者对于类型 #empty 默认值 V (如果该句柄为 null)。
在每个迭代中,迭代变量将传递给句柄的 body 调用。 从正文(类型)void返回的非V值会更新前导迭代变量。 循环句柄执行的结果将是该变量的最终V值(如果没有voidV变量)。
参数句柄的以下规则保留:ul<li 句柄不能>,并且必须返回类型<,此处>称为参数类型列表中的类型。iterationsnullintI
<li>句body柄不能null;其类型必须为窗体(V I A...)V,其中V为非,否则void为 <void例中,我们将类型void分配给名称V,我们将通过理解从(V I A...)V参数列表中悄悄地删除类型voidV,离开 (I A...)V。) <li>正文的参数列表(V I A...)有助于名为 <em>内部参数列表/em< 的类型列表>。 它将约束其他循环部件的参数列表。
<li>作为一种特殊情况,如果正文只V贡献和I类型,且没有其他A类型,则内部参数列表由句柄的参数A...类型iterations扩展。
<li>如果从内部参数列表中删除迭代变量类型 (V I) ,则生成的较短列表 (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>(某种形式iterations)的参数列表(A*)必须与外部参数列表(A...)有效相同。
</ul>
生成的循环句柄的结果类型和参数签名按如下方式确定:<ul><li>循环句柄的结果类型是正文的结果类型V。
<li>循环句柄的参数类型是外部参数列表中的类型 (A...)。
</ul>
下面是生成的循环句柄的伪代码。 在代码中, V/v 表示第二循环变量的类型/值以及循环的结果类型;并 A.../a... 表示传递给循环的参数。
<blockquote>
{@code
int iterations(A...);
V init(A...);
V body(V, int, A...);
V countedLoop(A... a...) {
int end = iterations(a...);
V v = init(a...);
for (int i = 0; i < end; ++i) {
v = body(v, i, a...);
}
return v;
}
}
</blockquote>
已在 9 中添加。
本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。