語言

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

定義

由初始化器、一個主體和謂詞構造一個 do-while 迴圈。

[Android.Runtime.Register("doWhileLoop", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)]
public static Java.Lang.Invoke.MethodHandle? DoWhileLoop(Java.Lang.Invoke.MethodHandle? init, Java.Lang.Invoke.MethodHandle? body, Java.Lang.Invoke.MethodHandle? pred);
[<Android.Runtime.Register("doWhileLoop", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)>]
static member DoWhileLoop : Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle -> Java.Lang.Invoke.MethodHandle

參數

init
MethodHandle

可選初始化器,提供迴圈變數的初始值。 可能是 null,暗示預設的初始值。 其他限制則見上文。

body
MethodHandle

迴路的主體,可能不是 null。 它控制迴圈參數和結果類型。 其他限制則見上文。

pred
MethodHandle

迴圈條件,可能不是 null。 其結果類型必須為 boolean。 其他限制則見上文。

傳回

一個由參數描述的 while 迴圈實作方法的處理。

屬性

備註

由初始化器、一個主體和謂詞構造一個 do-while 迴圈。 這是 #loop(MethodHandle[][]) 通用迴圈組合器的便利包裝器。

把手 pred 描述環狀條件;以及 body,其主體。 此方法產生的迴圈在每次迭代中,會先執行其主體,然後評估謂詞。 當謂詞在執行主體後,當謂詞計算到 時 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 doWhileLoop(A... a...) {
              V v = init(a...);
              do {
                v = body(v, a...);
              } while (pred(v, a...));
              return v;
            }
            }

</區塊引用>

新增9。

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

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

適用於