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