@kotlin_lang

Страница 943 из 982
Алексей
11.10.2018
14:44:28
Поясню - suspend функции - это прерываемые функции. У вас с точки зрения корутин где происходят прерывания?

Если у вас долгая IO операция, внутри которой вы не ждете данных из других корутин и не спите с помощью delay, то зачем вам suspend? А по поводу использования корутины вместо потока - почему бы и нет?:)

Жабра
11.10.2018
14:50:37
Алексей
11.10.2018
14:56:21
ну я потому и спросил, нужно ли это

Google
Глеб
11.10.2018
15:12:26
по сути, на вызывающем потоке происходит прерывание, а блокируется поток, указанный в withContext

без withContext блокируется вызывающий поток

ну и, собственно, пока он заблокирован, другие корутины на нем не запустятся и прерывания не возобновятся

Nameless
11.10.2018
15:15:11
а это костыли для легаси

Глеб
11.10.2018
15:16:16
звучит неплохо, но SQLite в андроиде, кажется, так не умеет. Если умеет, у меня случит открытие века. Возможно, обоих век.

Глеб
11.10.2018
15:17:41
Вот-вот

Nameless
11.10.2018
15:19:13
Вот-вот
на самом деле можно свой sqlite положить с чем то таким https://www.sqlite.org/asyncvfs.html

(конечно надо понимать зачем вы это делаете ? )

Глеб
11.10.2018
15:21:09
Агась, и утроить стоимость разработки на разбирательства. Надо ведь найти ещё способ читать/писать на диск без блокировки, а то в базу мы красиво пишем, а в кэш все-равно через жопу...

Но спасибо, вдруг понял, что неплохо как минимум следить за ситуацией с Java NIO под андроидом

Google
Глеб
11.10.2018
15:25:10
охблин

джекпот

спасибо

Иван
11.10.2018
15:30:13
Народ, добраться до Кронштадта на метеоре сейчас никак без экскурсии?

Nameless
11.10.2018
15:31:54
Andrey
11.10.2018
15:32:18
Народ, добраться до Кронштадта на метеоре сейчас никак без экскурсии?
— Здравствуйте, это канал об аниме? — Да. — Как мне пропатчить KDE2 под FreeBSD?

Nameless
11.10.2018
15:32:20
хз как на метеоре, но с открытием метро на беговой стало быстрее значительно добираться

Иван
11.10.2018
15:32:27
Не, ну правда

Я думал тут просто: вжух на катере и ты там. А получается два часа на автобусах с пересадками

Хотел вживую на остров Котлин взглянуть)

OlegKrikun
11.10.2018
15:34:25
Такси, вжух и там

Leonid
11.10.2018
15:34:44
от Старой Деревни автобус прямой вроде не больше часа едет

Beholder
11.10.2018
19:48:06
это всё не романтично. возьмите лодку напрокат и на вёсла

Alexander
11.10.2018
19:52:21
Igor
11.10.2018
20:26:32
Господа, у кого-нибудь работают примеры из https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.coroutines.experimental/-sequence-builder/yield.html ?

Lev
11.10.2018
22:07:07
Лол, я нашел момент, когда в котлине необходимо поставить точку с запятой. Когда после вызова функции, в последнем аргументе которой есть лямбда пишешь еще одну лямбду. Тогда оно не понимает, вторая лямбда отдельно или это вынесенная за скобки лямбда-аргумент

Egor
11.10.2018
23:14:25
Так может предыдущую лямбду вынести за скобки?

Google
Alexandr
12.10.2018
03:02:30
Импорты добавь...

Alexandr
12.10.2018
03:39:46
Я бы на код взглянул
я так понимаю fun test(arg1: String, arg2: Int, lam: () -> Unit){} test("das", 123) {};{}

без точки с запятой типо второе замыкание воспринимается как аргумент, но не должно вроде как

да и не понятно зачем такое

Bogdan
12.10.2018
03:41:30
без точки с запятой типо второе замыкание воспринимается как аргумент, но не должно вроде как
Нет, оно воспринимается как следующая строчка, в которой замыкание. Ну можно декомпилировать

Alexandr
12.10.2018
03:42:07
Нет, оно воспринимается как следующая строчка, в которой замыкание. Ну можно декомпилировать
вот и я пишу что тут что то не чисто, не должен он как аргумент воспринимать

Bogdan
12.10.2018
03:43:02
val x = 1; val y = 0 ну вот типа такого разве что

Алексей
12.10.2018
04:41:38
Alexandr
12.10.2018
04:43:19
это repl с сайта? может он тупо не поддерживает?

Алексей
12.10.2018
04:43:43
это repl с сайта? может он тупо не поддерживает?
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.coroutines.experimental/-sequence-builder/yield.html

Зачем тогда вообще добавили?:)

Alexandr
12.10.2018
04:44:19
не ко мне вопрос





Google
Alexandr
12.10.2018
05:03:22
только не вижу смысла в таких конструкциях

вне списка аргументов может быть описана только одна лямбда, которая идет последним аргументом, так что баг парсера



@lllewik багу в kotl.in/issue

Алексей
12.10.2018
05:19:06
почему баг?

я так понимаю, парсер пытается понять, что имется ввиду и поскольку нет ничего, что могло бы указывать на то, к чему второе {} - он применяет эту штуку к последней функции, а там уже есть что передавать

а, понял - имеется ввиду анонимная функция без переменных, видимо

Admin
ERROR: S client not available

Alexandr
12.10.2018
05:26:21
да

т.е. если поставить точку с запятой, то можно будет вызвать вторую лямбду на месте test("das", 123) {};{}()

Алексей
12.10.2018
05:27:46
да, понял

к слову

Alexandr
12.10.2018
05:28:08
только не знаю для чего это) если только для изоляции скоупа)

Алексей
12.10.2018
05:28:33


блин, лишнее зацепил, но ладно

Bogdan
12.10.2018
05:39:31
Ммим

Mikhail
12.10.2018
05:47:39
только не знаю для чего это) если только для изоляции скоупа)
Это для того чтобы можно было сделать функцию вида ((() -> A) -> () -> B)

то есть в данном примере совсем не баг а фича: Можно сделать функцию, которая принимает функцию и возвращает функцию, которая принимает функцию

Алексей
12.10.2018
05:53:25
Как тут?

Mikhail
12.10.2018
05:54:43
Господа, у кого-нибудь работают примеры из https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.coroutines.experimental/-sequence-builder/yield.html ?
Там в 1.3 переименовали оператор buildSequence в sequence. в итоге примеры из 1.3 а на сайте интерпертатор 1.2.71

Google
Alexandr
12.10.2018
06:04:17
Попахивает джаваскриптом. Зачем так делать?
не знаю, я так не делаю) выше объяснили кому это надо)

Lev
12.10.2018
07:50:48
Я немного ошибся, там лямбда аргумент не нужна. У котлина есть стандартная функция: inline fun measureTimeMillis(block: () -> Unit): Long Мне оно показалось не совсем удобным: не возвращает значение. А мы обычно пишем код, а потом че то хотим померять. И выносить че то для этого наружу как то не очень удобно. Я и написал: inline fun <T> (() -> T).ms(callback: (time: Long) -> Unit): T { val start = System.currentTimeMillis() val result = this() callback((System.currentTimeMillis() - start)) return result } Таким образом вы берете и любое выражение можете померять: val a = expression val a = { expression }.ms { log("calculation took $it ms") } При этом у меня сложилась такая ситуация: var someList = emptyList<Int>() { 1+1 }.ms {println("it took $it")} И вот это {1+1} котлин справедливо считает аргументом-лямбдой.

https://pl.kotl.in/SJf0fCpqX

Lev
12.10.2018
07:55:12
Я так тоже делал, но это корявенько пишется на деле. Надо писать let { log(it.second); it.first}, каждый раз вспоминая какой из них мс а какой результат. Поэтому поменял на лямбду. (Логгер то в inline просто так не воткнешь)

Lev
12.10.2018
08:04:07
Ну, тогда надо и колбек инлайнить

Но вообще, я бы забил на инлайн, это все равно отлабочная функция и лишняя лямбда как то не особо мсек добавит

Mikhail
12.10.2018
08:05:21
ну такое, а потом вы вдруг захотите это в логи писать

Alexander
12.10.2018
08:05:22
у вашей ms функции есть побочный эффект - она создает объект из вашей лямбды
Не проблема создавать объекты в лямбде. Примеры - let, with, run из stdlib

Mikhail
12.10.2018
08:05:38
a.let(::foo).let(::bar) превращается в bar(foo(a))

Alexander
12.10.2018
08:09:10
let with и run инлайнятся
Я к тому, что это валидная инлайн функция и из-за этого немного не понятно, в чём суть побочного эффекта: inline fun <T> measureTimeMillis(block: () -> T): Pair<T, Long> { val start = System.currentTimeMillis() val result = block() return result to System.currentTimeMillis() - start }

Lev
12.10.2018
08:11:38
Сек... он имел ввиду что моя функция люшнюю лямбду создает. inline fun <T> (() -> T).ms(callback: (time: Long) -> Unit): T { val start = System.currentTimeMillis() val result = this() callback((System.currentTimeMillis() - start)) return result }

ну такое, а потом вы вдруг захотите это в логи писать
Да и в этом случае мало что изменится

Alexander
12.10.2018
08:14:04

Страница 943 из 982