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 и обновляться значением, возвращенным из ее вызова. Результатом выполнения цикла будет окончательное значение дополнительной локальной переменной цикла (если она имеется).

Следующие правила удерживают для этих аргументов handles:<ul><li>Дескриптор body не должен быть null; его тип должен иметь вид (V A...)V, где V имеет значение не -void или иначе (A...)void. (В этом void случае мы назначим тип void имени Vи напишем (V A...)V с пониманием того, что void тип V незаметно удаляется из списка параметров, оставляя (A...)V.) <li>Список (V A...) параметров тела называется внутренним списком <<параметров em>/em>. Он ограничивает списки параметров других частей цикла. <li>Если тип V переменной итерации удаляется из внутреннего списка параметров, результирующий более короткий список (A...) называется <em>external parameter list</em>. <Li>Тип возвращаемого Vтекста , если не являетсяvoid , определяет тип дополнительной переменной состояния цикла. Текст должен принимать и возвращать значение этого типа V. <Если>init параметр не является ,null он должен иметь тип возвращаемого значения V. Его список параметров (формы <c>(A*)</c>) должен быть фактически идентичен списку (A...)внешних параметров . <Li>Если 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).

Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом Android и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License.

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