Перейти к содержанию

Cobra/Keywords/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 
#/