Cobra/Keywords/yield
Yield
правитьyield сообщает компилятору, что метод, в котором он указан, является «блоком итератора» (iterator block).
Новый класс создается и компилируется для реализации поведения, которое выражается в методе блока итератора, возвращающий объект реализующий интерфейс IEnumerable.
Метод, использующий yield, будет возвращать интерфейс IEnumerable, т.е. результатом будет объект перечисления.
Выражение yield вычисляется и возвращается в качестве значения объекта перечисления; выражении должен быть неявно преобразован в выход типа итератора.
Вызов yield break передает управление к вызывающему итератору и сигнализируется о конце итерации.
Оператор yield может располагаться только внутри блока итератора, который может реализовываться в качестве основной части метода, оператора или метода доступа. Основная часть таких методов, операторов или методов доступа управляется следующими ограничениями:
- Оператор yield не может располагаться в любом месте блока try-catch. Он может располагаться в блоке try, если за ним следует блок finally.
- Оператор yield break может располагаться в блоке try или catch, но не внутри блока finally.
Синтаксис
правитьyield [<expression>]
yield break
Пример
правитьuse System.Collections
class Pwr
def power(num as int, exponent as int) as IEnumerable is shared
counter = 0
result = 1
while counter < exponent
counter += 1
result = result * num
yield result
yield break
def main is shared
# Display powers of 2 up to the exponent 8:
for i in .power(2, 8)
print i
/#
Output:
2 4 8 16 32 64 128 256
#/