@kotlin_lang

Страница 944 из 982
Lev
12.10.2018
08:16:46
... а чего они сделают?)

Из этой сиутации помоему никак не выйти. Лямбда после скобок == аргумент.

Разве что предупреждение добавлять, мол тут у вас "лямбда", а аргумента то нет. Weak warning. А потом Supressить его?)

у вашей ms функции есть побочный эффект - она создает объект из вашей лямбды
Хм, я посмотрел декомпайл. Вроде нету объекта. Я не совсем ас в этом.

Google
Lev
12.10.2018
08:23:35
От боевого кода вот так получается: long start$iv$iv = System.currentTimeMillis(); Object result$iv$iv = $receiver$iv.invoke(); long it = System.currentTimeMillis() - start$iv$iv; this.log.debug("visitor took: " + it); Ну собственно, действительно, нет особого смысла объект городить

Mikhail
12.10.2018
08:26:57
$receiver$iv.invoke() а вот это что?

переменная с объектом нашей лямбды и вызов invoke() у нее

Alexander
12.10.2018
08:37:35
Из этой сиутации помоему никак не выйти. Лямбда после скобок == аргумент.
Ну, вообще не совсем. Изначально вроде для всего предполагалось, что перенос строки вполне себе явно даёт понять, что текущее выражение/утверждение закончено, кроме случаев когда до переноса явно видно, что на следующей строке должен быть контент. Поэтому 1+ 2+ 3 Это 6, а 1 +2 +3 это три числа. Может конечно решили, что со скобками не всё так просто, но это было бы странно.

Lev
12.10.2018
08:41:18
Ну да, лямбда там лишняя. Так что оставлю как было

Alexey
12.10.2018
08:56:46
что значит "кастомные"?
Это когда ты можешь сам написать как и во что интерполировать строку: https://docs.scala-lang.org/overviews/core/string-interpolation.html В скалке это по сути сахар, который пребразуется в вызов функции класса, в этой статье - это Advanced usage Благодаря этому можно писать различные dsl'и поверх интерполяции, например шлёпать sql запросы https://tpolecat.github.io/doobie/docs/05-Parameterized.html

А в котлине это увы прибито гвоздями к языку

Lev
12.10.2018
09:04:47
Про лямбду-аргумент https://youtrack.jetbrains.net/issue/KT-27548

Google
Mikhail
12.10.2018
09:14:47
нет, нельзя

а смысл, на самом деле, так делать?

это же просто кастомный toString, или я что-то не понимаю?

@eld0727

Nick
12.10.2018
09:15:41


Bogdan
12.10.2018
09:23:14
Да

Alexander
12.10.2018
09:23:37
Если у тебя только get есть на деле, то да. val instance by lazy { RetrofitUtils() }

Bogdan
12.10.2018
09:26:02
И так лучше не писать есть специальный модификатор, который дает отложеную иницилизацию (компилятор перекладывает это на твои плечи)

Alexander
12.10.2018
09:30:18
А вар разве нельзя?
У lazy нету setValue, судя по всему.

Nick
12.10.2018
09:30:56
Да
Ну это я понял уже, да. Спасибо

Lev
12.10.2018
09:31:22
А у меня вот еще вопрос Тут одну задачку надо решать полным перебором (поиск оптимального пути в динамическом графе (с внутренними ограничениями), никакие известные мне алгоритмы не подошли, математики сказали забить и решать в лоб). Есть достаточно большой набор вариантов variants (несколько тысяч). Каждый из них надо посчитать (Variant) -> Double. А время расчета полного варианта полсекунды. Я там немного покешировал, и оно считает все варианты за секунд 13. Но все равно как то... не круто. Но вот что еще можно сделать: это посередине расчета сравнить промежуточный результат с наилучшим (наименьшим Double). Если промежуточный уже больше наилучшего - дальше можно не считать. А ядер то много на серваке. https://pl.kotl.in/HJS9KyR5Q И с лучшим результатом надо работать потокобезопасно. Я использовал потокобезопасноть, но вот именно... в таком виде нет %) Я ведь правильно понимаю что для свойства с объектом а не примитивом достаточно так же указать @Volatile? Сам объект (Double) не мутабельный. И я буду менять его целиком.

dimiii
12.10.2018
09:39:24
А у меня вот еще вопрос Тут одну задачку надо решать полным перебором (поиск оптимального пути в динамическом графе (с внутренними ограничениями), никакие известные мне алгоритмы не подошли, математики сказали забить и решать в лоб). Есть достаточно большой набор вариантов variants (несколько тысяч). Каждый из них надо посчитать (Variant) -> Double. А время расчета полного варианта полсекунды. Я там немного покешировал, и оно считает все варианты за секунд 13. Но все равно как то... не круто. Но вот что еще можно сделать: это посередине расчета сравнить промежуточный результат с наилучшим (наименьшим Double). Если промежуточный уже больше наилучшего - дальше можно не считать. А ядер то много на серваке. https://pl.kotl.in/HJS9KyR5Q И с лучшим результатом надо работать потокобезопасно. Я использовал потокобезопасноть, но вот именно... в таком виде нет %) Я ведь правильно понимаю что для свойства с объектом а не примитивом достаточно так же указать @Volatile? Сам объект (Double) не мутабельный. И я буду менять его целиком.
это оффтоп, наверное, но все же. Я не совсем понял суть проблемы, но пришел с предложением ) Что если пихать результаты в priority queue? А что за задача, кстати? Какова природа (Variant) -> Double. ?

Alexey
12.10.2018
09:47:53
это же просто кастомный toString, или я что-то не понимаю?
Вот именно что нет, в результате интерполяции ты можешь сделать из строки объект любого типа. У нас в проекте например есть такой интерполятор implicit class SqlStringContext(val sc: StringContext) { def sql(args: QueryPart*): Query = ??? } И он позвлоляет сделать, например, вот такую штуку: sql"select * from foo where bar in (${set(Set(1, 2, 3))})" == Query( "select * from foo where bar in (?,?,?)", List(IntParam(1), IntParam(2), IntParam(3)) )

Alexey
12.10.2018
09:49:39
чем это отличается от обычной интерполяции, скормленной парсеру?
Тем, что компилятор сам разбивает строки на части, и можно типизировать аргументы

Google
Alexey
12.10.2018
09:49:53
args - это уже не просто строки

Выражение выше примерно вот так запишится: new SqlStringContext(StringContext("select * from foo where bar in (", ")")).sql(set(Set(1, 2, 3))

Lev
12.10.2018
09:55:46
А у меня вот еще вопрос Тут одну задачку надо решать полным перебором (поиск оптимального пути в динамическом графе (с внутренними ограничениями), никакие известные мне алгоритмы не подошли, математики сказали забить и решать в лоб). Есть достаточно большой набор вариантов variants (несколько тысяч). Каждый из них надо посчитать (Variant) -> Double. А время расчета полного варианта полсекунды. Я там немного покешировал, и оно считает все варианты за секунд 13. Но все равно как то... не круто. Но вот что еще можно сделать: это посередине расчета сравнить промежуточный результат с наилучшим (наименьшим Double). Если промежуточный уже больше наилучшего - дальше можно не считать. А ядер то много на серваке. https://pl.kotl.in/HJS9KyR5Q И с лучшим результатом надо работать потокобезопасно. Я использовал потокобезопасноть, но вот именно... в таком виде нет %) Я ведь правильно понимаю что для свойства с объектом а не примитивом достаточно так же указать @Volatile? Сам объект (Double) не мутабельный. И я буду менять его целиком.
Пока решение: писать и сравнивать через синхронизировнный метод в котором сравнивать текущее значение и предлагаемое. А вот как читать? Тоже всегда через синхронизированный или можно через volatile?

Alexander
12.10.2018
10:10:40
Звучит как задача для AtomicReference.updateAndGet(). И синхронизация не нужна будет.
Синхронизация у него унутре, но она достаточно умная.

Alexander
12.10.2018
11:20:34
Плейлист дополнили всеми докладами первого дня: https://www.youtube.com/playlist?list=PLQ176FUIyIUbVvFMqDc2jhxS-t562uytr

Ivan
12.10.2018
11:48:03
Товарищи, тут же вроде были люди которые секут в чистых функциональщине и всё такое: у меня есть функция которая мапит из файла байты на структуру. Она очевидно принимает java.io.File, т.е. по идее это не чистая функция, правильно? Вопрос такой: как подобная задача решается через фп? Я так понимаю вместо файла должна быть какая-то монада, но как это выглядит?

Alexey
12.10.2018
11:50:23
И передавать потом этот результат в функцию

Ivan
12.10.2018
11:51:03
Видимо функция должна принимать массив байт, а из файла читать некая IO монада
Мне вот и интересно как будет выглядеть эта io-монада

Ivan
12.10.2018
11:51:42
dimiii
12.10.2018
11:52:08
dimiii
12.10.2018
11:52:27
вот точнее место https://arrow-kt.io/docs/effects/io/#effect-comprehensions

Mikhail
12.10.2018
11:52:35
Как самолет из соломы
как буритто же

Google
Igor
12.10.2018
11:53:13
Бурито из соломы))

Mikhail
12.10.2018
11:53:14


Alexey
12.10.2018
11:54:04
а если файл в три гига?
Это вообще никак к монадам не относится, вопрос был совершенно другой

Mikhail
12.10.2018
11:57:26
а если файл в три гига?
человек маппит байты на структуру, очевидно что там не три гига

Admin
ERROR: S client not available

Alexandr
12.10.2018
11:58:13
малоли

может он их мапит и в базу

Ivan
12.10.2018
12:03:52
https://arrow-kt.io/docs/effects/io/
Спасибо за ссылку

Sergey
12.10.2018
12:26:37
https://github.com/JetBrains/kotlin-native/releases/tag/v1.0 внезапно

Alexandr
12.10.2018
12:28:07
о_О, скоро увидим 1.3 и корутины 1.0

Жабра
12.10.2018
12:29:03
Sergey
12.10.2018
12:29:23
ну как минимум паровоз релиза начался

если опять не скажут что это автоматическая сборка пошла))

Quantum Harmonizer
12.10.2018
12:29:51
https://github.com/JetBrains/kotlin-native/releases/tag/v1.0 внезапно
вот не лень же за тегами следить :)

Anna
12.10.2018
12:30:21
Ну кто же в пятницу вечером-то релизит

Alexandr
12.10.2018
12:33:02
https://github.com/JetBrains/kotlin/releases/tag/build-1.3.0-rc-162

core еще не поплыл

Жабра
12.10.2018
12:34:48
Ну кто же в пятницу вечером-то релизит
Ну чтобы на выходных дома посмотрели, что сломалось и что добавилось, а в понедельник спокойно смогли мигрировать. :)

OlegKrikun
12.10.2018
12:37:49
https://twitter.com/kotlinconf/status/1050722677185499136

Google
Beholder
12.10.2018
13:26:00
оффтопик: кто-нибудь пользуется новым http-клиентом в Идее? у меня там неправильно отображается кодировка в ответном xml

Алексей
12.10.2018
15:29:33
Мне нужна помозь в таком вопросе: Есть два списка list1: List<Int> и list2: List<Int>. Мне нужно их так сравнить, чтобы возвращалось true, если списки содержат хотя бы один схожий элемент. Например (1,3,4) и (1,5,9) вернет true, а (1,3,4) и (2,7,8) вернет false. В котлине как это сделать наиболее оптимально?

Quantum Harmonizer
12.10.2018
15:40:19
Есть у меня, значит, набор полей известных типов ?. И есть рандомная структура (скажем, JSON) без типов ?. Как замаппить ? на ?? а) ? парсит данные, определяет их типы и суёт в визитор. ? реализует визитор и просит типы привестись (тогды типы начинают уметь приводиться друг в друга, это ж песец сколько кода) б) ? сразу говорит: дай-ка мне такие типы. ? бежит парсить непосредственно в эти типы, эффективно и немногословно, но не особо понятно, как это сделать, особенно не выделяя промежуточные объекты — ведь уже не визитор. в) целиком повторить API типичного стримингового парсера?..

Quantum Harmonizer
12.10.2018
16:03:08
Я не совсем понимаю проблему, но можно генерировать объект ленивым образом.
В не-типизированной шняге типа JSON значения можно интерпретировать по-разному. Число — как long, double, BigDecimal. Строку — как String или byte[]. Вопрос — как тому, кто знает типы, спросить у того, кто умеет работать с форматом.

Alexander
12.10.2018
16:04:54
В не-типизированной шняге типа JSON значения можно интерпретировать по-разному. Число — как long, double, BigDecimal. Строку — как String или byte[]. Вопрос — как тому, кто знает типы, спросить у того, кто умеет работать с форматом.
Пока не вижу проблемы. Есть ссылка на поле (скажем, имя), а дальше я в момент создания типизированного объекта, прошу считать это поле как тот или иной тип

Geronimo
12.10.2018
16:05:13
Кто-нибудь работал с переводом английских, русских слов в транскрипцию? Можете подсказать есть ли хорошие api для этого?

Quantum Harmonizer
12.10.2018
16:05:22
Передать древовидную структуру данных (схему), описывающую типы
тогда придётся выделять промежуточные объекты...

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