MethodHandles.CountedLoop 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
| 名稱 | 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。
本頁部分內容為基於 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。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。