169 похожих чатов

Привет всем, вот захотелось мне ленивую генерилку всего и вся

сделать. Помимо прочего нагуглилось вот это https://stackoverflow.com/questions/3797699/generator-block-to-iterator-stream-conversion

В общем, топовый ответ оттуда:

scala> def data(f : Int => Unit) = for(i <- 1 to 10) {
| println("Generating " + i)
| f(i)
| }
data: (f: (Int) => Unit)Unit

scala> def toTraversable[T]( func : (T => Unit) => Unit) = new Traversable[T] {
| def foreach[X]( f : T => X) = func(f(_) : Unit)
| }
toTraversable: [T](func: ((T) => Unit) => Unit)java.lang.Object with Traversable[T]

Использование:
scala> toTraversable(data).view.take(3).sum
Generating 1
Generating 2
Generating 3
Generating 4
res1: Int = 6

Если в дебагере смотреть, Traversable генерируется до конца (так полагаю watcher'ы высчитываются и побуждают эту генерацию), но потом все таки выполняется take(3), но не как я бы ожидала. Там магия какая-то: внутри data, после выполнения f(i) мы перескакиваем обратно на foreach в traversable, а как бы цикл for(i <- 1 to 10), который внутри data, игнорируем. Я увидела breaks в traversable trait'е, но не осилила где они используются и как это работает. Anyone knows?

1 ответов

3 просмотра

def invoke { try{ def f = (i:Int) => { if (enough) throw hitriiexception } data(f) }catch { case x:hitriiexception => } } типа того. брейк, ретурн - также через эксепшены работают - сахарок

Похожие вопросы

Обсуждают сегодня

А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Ошибка: segmentation fault (core dumped) Код: pastebin.com/BEsNNSSV Сообщение от компилятора: отсутствует ОС: Arch Linux Ядро: x86_64 Linux 6.9.7-arch1-1 Процессор: Intel Cele...
sec
4
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Кстати, я тут еще с одной темой столкнулся, вот учу я C++, на таком то ресурсе, а остальные постоянно советуют практиковаться, что то писать, проекты, но как писать если вот т...
aaswq1
7
@ahndmn @ayaw0_0 здарова, на чем пишете?
Aiwan \ (•◡•) / _bot
7
Коллеги, как получить PId для собственного процесса из под линукса?
Роман Лях (rgreat)
6
Карта сайта