Язык

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.

Java документации по java.lang.invoke.MethodHandles.doWhileLoop(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle).

Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".

Применяется к