語言

MethodHandles.WhileLoop(MethodHandle, MethodHandle, MethodHandle) 方法

定義

由初始化器、一個主體和謂詞構造一個 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 ,迴圈將終止(此時主體不會被執行)。

handle 描述 init 額外可選迴圈-局部變數的初始值。 每次迭代中,若有此迴圈區域變數,會傳給並 body 更新為調用時回傳的值。 迴圈執行的結果將是額外迴圈-局部變數的最終值(若存在)。

以下規則適用於這些參數的句柄:ul>li 這個柄必須不是null;其型態必須是形式(V A...)V為 ,其中 V 是非void ,否則 (A...)void。body><< (在這種情況下 void ,我們將型別 void 指派給名稱 V,並 (V A...)V 假設某個 void 型別 V 會悄悄從參數列表中移除,留下 (A...)V。) <li>主體的參數列表 (V A...) 稱為 <em>內部參數列表</em>。 它會限制其他迴圈部分的參數清單。 <li>如果從內部參數列表中刪除迭代變數類型 V ,所得的較短列表 (A...) 稱為 <em>外部參數列表</em>。 <li>若非void ,則 body return 類型 V,決定迴圈中額外狀態變數的類型。 身體必須同時接受並回傳此類型的 V值。 <li>如果 init 非null ,則必須具有返回類型 V。 其參數列表(形式 <為 c>(A*)</c>))必須與外部參數列表 (A...)實質上相同。 <li>如果 init 是 null,迴圈變數將初始化為其 #empty 預設值。 <李>pred,把手不能。null 它必須有 作為 boolean 其返回類型。 其參數列表(可為空或形式 (V A*)為 )必須與內部參數列表實質上相同。 </ul>

產生的迴圈句柄的結果型態與參數簽名如下:<ul<>li>迴圈柄的結果型別即為主體的結果型別V。 <li>迴圈手柄的參數類型是外部參數列表中的類型 (A...)。 </ul>

以下是產生迴圈句柄的偽程式碼。 在程式碼中,表示 V/v 唯一迴圈變數的型別 / 值以及迴圈的結果型別;以及 A/a,傳遞給迴圈的參數。 <引用>

{@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;
            }
            }

</區塊引用>

新增9。

Java 文件 java.lang.invoke.MethodHandles.whileLoop(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle)。

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

適用於