語言

MethodHandles.CountedLoop 方法

定義

多載

名稱 Description
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 handle 來回傳迴圈計數器的起始值,必須是 int。 其他限制則見上文。

end
MethodHandle

非null 句柄回傳迴圈計數器的末值(迴圈會跑到 end-1)。 結果型態必須為 int。 其他限制則見上文。

init
MethodHandle

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

body
MethodHandle

迴路的主體,可能不是 null。 它控制迴圈參數與結果類型(標準情況下詳見上文)。 它必須接受自身的回傳類型(若非空回傳類型)加上一個 int 參數(計數器),且可接受任意數量的額外類型。 其他限制則見上文。

傳回

一個代表迴圈的方法柄。

屬性

備註

構建一個在數範圍內計數的迴圈。 這是 #loop(MethodHandle[][]) 通用迴圈組合器的便利包裝器。

迴圈計數 i 器是一個類型的 int迴圈迭代變數。 start和 end 手把決定迴圈計數器的起始(包含)與結束(排他)值。 迴圈計數器將初始化為 int 從 handle 評估 start 回傳的值,並執行(唯一)返回的值 end ,步寬為 1。

若 body handle 回傳非void 型別 V,則該類型的前迴圈迭代變數也存在。 此變數會使用可選init的句柄初始化,或若該句柄為 null,則初始化為 #empty 預設值的 V 。

在每次迭代中,迭代變數會傳遞給 handle 的呼叫 body 。 從主體回傳的非void 值(型別 V為 )則更新了領先迭代變數。 迴圈處理的結果將是該變數的最終 V 值(若 void 無 V 變數則為)。

以下規則適用於參數 handles:<ul><li>與 endstart handles 不得為 null,且兩者都必須回傳共同型別 int,此I處稱為參數型別列表。 <li>把 body 柄不一定是 null;其型態必須為 (V I A...)V,其中 V 是非void ,否則 (I A...)void。 (在這種情況下 void ,我們將型別 void 指派給名稱 V,並 (V I A...)V 假設某個 void 型別 V 會悄悄從參數列表中移除,留下 (I A...)V。) <li>主體的參數清單 (V I A...) 會貢獻於一個稱為 <em>內部參數列表</em> 的類型列表。 它會限制其他迴圈部分的參數清單。 <li>作為一個特殊情況,若主體僅V貢獻 和 I 類型,沒有額外A類型,則內部參數列表會被 handle 的end參數類型A...擴展。 <li>如果從內部參數列表中刪除迭代變數類型 (V I) ,所產生的較短列表 (A...) 稱為 <em>外部參數列表</em>。 <li>若非void ,則 body return 類型 V,決定迴圈中額外狀態變數的類型。 主體必須同時接受一個導向參數,並回傳此類型的 V值。 <li>如果 init 非null ,則必須具有返回類型 V。 其參數列表(形式 <為 c>(A*)</c>))必須與外部參數列表 (A...)實質上相同。 <li>如果 init 是 null,迴圈變數將初始化為其 #empty 預設值。 <li>的 start 參數列表(某種形式 (A*))必須與外部參數列表 (A...)實際上相同。 <同>理,參數 end 列表必須與外部參數列表實質上相同。 </ul>

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

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

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

</區塊引用>

新增9。

的 java.lang.invoke.MethodHandles.countedLoop(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle)Java 檔。

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

適用於

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 handle 來回傳此迴圈應執行的迭代次數。 句柄的結果型別必須是 int。 其他限制則見上文。

init
MethodHandle

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

body
MethodHandle

迴路的主體,可能不是 null。 它控制迴圈參數與結果類型(標準情況下詳見上文)。 它必須接受自身的回傳類型(若非空回傳類型)加上一個 int 參數(計數器),且可接受任意數量的額外類型。 其他限制則見上文。

傳回

一個代表迴圈的方法柄。

屬性

備註

構建一個執行給定次數迴圈的迴圈。 這是 #loop(MethodHandle[][]) 通用迴圈組合器的便利包裝器。

迭代次數由 iterations 把柄評估結果決定。 迴圈計數 i 器是一個型別 int為 的額外迴圈迭代變數。 每次迭代都會初始化為 0,並以 1 遞增。

若 body handle 回傳非void 型別 V,則該類型的前迴圈迭代變數也存在。 此變數會使用可選init的句柄初始化,或若該句柄為 null,則初始化為 #empty 預設值的 V 。

在每次迭代中,迭代變數會傳遞給 handle 的呼叫 body 。 從主體回傳的非void 值(型別 V為 )則更新了領先迭代變數。 迴圈處理的結果將是該變數的最終 V 值(若 void 無 V 變數則為)。

以下規則適用於參數 handles:ul>li handle 必須iterations不是 null,且必須回傳 int,這裡稱為I參數型別列表。><< <li>把 body 柄不一定是 null;其型態必須為 (V I A...)V,其中 V 是非void ,否則 (I A...)void。 (在這種情況下 void ,我們將型別 void 指派給名稱 V,並 (V I A...)V 假設某個 void 型別 V 會悄悄從參數列表中移除,留下 (I A...)V。) <li>主體的參數清單 (V I A...) 會貢獻於一個稱為 <em>內部參數列表</em> 的類型列表。 它會限制其他迴圈部分的參數清單。 <li>作為一個特殊情況,若主體僅V貢獻 和 I 類型,沒有額外A類型,則內部參數列表會被 handle 的iterations參數類型A...擴展。 <li>如果從內部參數列表中刪除迭代變數類型 (V I) ,所產生的較短列表 (A...) 稱為 <em>外部參數列表</em>。 <li>若非void ,則 body return 類型 V,決定迴圈中額外狀態變數的類型。 主體必須同時接受一個導向參數,並回傳此類型的 V值。 <li>如果 init 非null ,則必須具有返回類型 V。 其參數列表(形式 <為 c>(A*)</c>))必須與外部參數列表 (A...)實質上相同。 <li>如果 init 是 null,迴圈變數將初始化為其 #empty 預設值。 <li>的 iterations 參數列表(某種形式 (A*))必須與外部參數列表 (A...)實際上相同。 </ul>

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

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

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

</區塊引用>

新增9。

的 java.lang.invoke.MethodHandles.countedLoop(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle)Java 檔。

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

適用於