proposal 61405: spec: add range over int, range over func
Вот и настал тот момент - Расс официально предлагает добавить поддержку range
над следующими видами выражений:
▸ Range over integer: for x := range n { ... }
где n целочисленное выражение или переменная. Будет эквивалентно for x := 0; x < n; x++ { ... }
▸ Range over function: теперь можно будет писать код for x, y := range f { … }
где f
это функция или метод со следующей сигнатурой: 1. func(yield func(T1, T2)bool) bool
2. func(yield func(T1)bool) bool
3. func(yield func()bool) bool
Значения которые не нужны запрашивающему коду (тот кто вызывает range
) будут автоматически выброшены. Например для функции func(yield func(T1, T2) bool) bool
допустимы следующие варианты range
: 1. for x, y := range f { ... }
2. for x, _ := range f { ... }
3. for _, y := range f { ... }
4. for x := range f { ... }
5. for range f { ... }|
Возвращаемое yield
булево значение позволяет определить вызываемому коду (тот кого вызывают через range
), что пора прекратить исполнение и двигаться на выход (в случае break
или return
). Т.е. в случае for range f { break; }
сразу после первого вызова yield
вернет false
.
Детали реализации и различные тонкости (такие как, что будет если yield
будет вызван после выхода из тела range
) пока обсуждаются.
>>Click here to continue<<