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 после выполнения текста.
Дескриптор init описывает начальное значение дополнительной локальной переменной цикла. В каждой итерации эта переменная цикла, если она присутствует, будет передана body и обновлена со значением, возвращаемым из его вызова. Результат выполнения цикла будет окончательным значением дополнительной локальной переменной цикла (при наличии).
Следующие правила, удерживаемые для этих дескрипторов аргументов:ul>li, дескриптор не должен быть; его тип должен иметь nullформу(V A...)V, где V неvoid является или иным (A...)voidобразом.body><< (В void данном случае мы назначим тип имениV, и мы будем писать (V A...)V с пониманием того, что void тип Vvoid тихо удаляется из списка параметров, оставляя (A...)V.) <li>Список параметров текста называется списком>< внутренних параметров< em/em>.(V A...) Он будет ограничивать списки параметров других частей цикла.
<li>Если тип V переменной итерации удаляется из внутреннего списка параметров, результирующий короткий список (A...) называется списком <>внешних параметров< или em>.
<li>Тип возвращаемого текста V, если он неvoid является, определяет тип дополнительной переменной состояния цикла. Текст должен принимать и возвращать значение этого типа V.
<li>, если init он не являетсяnull, он должен иметь тип возвращаемого значения V. Его список параметров (некоторых форм <c>(A*)</c>) должен быть фактически идентичным внешнему списку (A...)параметров.
<li>If init , nullпеременная цикла будет инициализирована в его #empty значение по умолчанию.
<li>Дескриптор pred не должен быть null. Он должен иметь тип boolean возвращаемого значения. Его список параметров (пустой или формы (V A*)) должен быть фактически идентичным внутреннему списку параметров.
</ul>
Результирующий дескриптор цикла результирующий тип и сигнатура параметра определяются следующим образом:< ul><li>Тип результата дескриптора цикла — это тип V результата тела.
<li>Типы параметров обработчика цикла — это типы (A...)из списка внешних параметров.
</ul>
Ниже приведен псевдокод для результирующего дескриптора цикла. В коде V/v представляет тип / значение единственной переменной цикла, а также тип результата цикла, а A/aтакже аргумент, переданный в цикл.
<blockquote>
{@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;
}
}
</blockquote>
Добавлено в 9.
Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".