@scala_ru

Страница 1146 из 1499
Александр
14.12.2017
13:09:35
Alexander
14.12.2017
13:09:52
а иначе кому отдаётся сабскрипшн - непонятно

почему тебя это вообще волнует?

Oleksandr
14.12.2017
13:10:30
я не до конца понимаю спеку раз так, то я наверняка что-то упустил

Google
Alexander
14.12.2017
13:11:07
просто реализуй паблишера

Oleksandr
14.12.2017
13:11:26
в общем, можно ли считать, что эта спека — что-то вроде монадных законов, и её корректная на 100% реализация подразумевается априори ?

Alexander
14.12.2017
13:12:17
https://github.com/reactive-streams/reactive-streams-jvm/tree/master/tck

Oleksandr
14.12.2017
13:13:31
о, круто, как-то не заметил эту штуку, спасибо

Yura
14.12.2017
13:40:08
А можете подсказать, столкнулся с проблемой. Примешиваю трейт в несколько классов, в трейте находится набор полей, можно ли сделать так, что бы поля в трейте инициализировали единожды и в потомков ушёл один объект?

Eugene
14.12.2017
13:41:19
положить рядом с трейтом object компаньон и там держать синглетон инициализацию

trait AppConfig { val config = AppConfig.config protected val gamesInPool = config.as[Int]("nodewars.pool.games.count") protected val endpoint = config.as[String]("nodewars.endpoint") protected val prod = config.as[Boolean]("nodewars.prod") } object AppConfig { lazy val config = ConfigFactory.load() }

типа так?

Yura
14.12.2017
13:42:49
Спасибо, не додумался через def прокинуть ссылку на синглетон

Eugene
14.12.2017
13:43:40
как вы тут код форматируете? сдедал через тройный обратные кавычки как в мануале написано а он обычным текстом...

Aleksei
14.12.2017
13:44:27
def main

ну вот обратные

Eugene
14.12.2017
13:44:42
lazy val config = ConfigFactory.load()

Google
Eugene
14.12.2017
13:44:45
хм

magic

Aleksei
14.12.2017
13:45:09
отредактируй попробуй свое

Eugene
14.12.2017
13:45:53
неа - у меня не получается одинарные обратные кавычки вот как чуть выше получилось а тройные нет

а во затащщило, спасибо

нельзя перевод строки делать

Aleksei
14.12.2017
13:50:41
можно

надо делать тройные бэктики

на отдельных строках перед и после

тогда ок

Eugene
14.12.2017
13:52:20
спасибо

Oleksandr
14.12.2017
14:21:16
abstract class Column { type T val data: Array[T] } abstract class Encoder[T] { val initialState: Seq[Column] def encode(t: T): Seq[Column#T] } можно ли как-то зафорсить, чтобы тип результата у encode был именно тем, что выдается от initialState ?

грубый пример использования: T = (Int, String) initialState = Seq(new Int32Column, new StringColumn) encode(...): (Int32Column#T, StringColumn#T) === (Int, String)

Alexey
14.12.2017
14:27:09
Тип колонок надо каждую отдельно сохранять

Eugene
14.12.2017
14:27:29
так неочень получится, потому что T находится внутри Column соответственно надо Encoder[T] переписать тоже на Encoder { type T }

Oleksandr
14.12.2017
14:28:55
в этом сниппете энкодер можно по-всякому менять а вот Column фиксированный (этот хак нужен)

идея в том, чтобы преобразовывать класс предметной области(кейс класс, тапл, ...) в нечто-состоящее-из-нужных-типов-колонок

Eugene
14.12.2017
14:30:10
а чем shapeless не подойдет? там как раз куча генераторов на case class которые все приведут к HList

а уж на HList можно писать какие там нужно типобезопасные преобразования

и тогда на initialState мапится Poly c нужными типами

Google
Oleksandr
14.12.2017
14:32:01
крайне не хочется делать зависимость на шейплесс, по ряду причин

Eugene
14.12.2017
14:32:20
ну вы там по сути изобретаете его часть

Oleksandr
14.12.2017
14:32:21
можно считать это ограничением, без шейплеса :)

Eugene
14.12.2017
14:32:47
ну тогда надо добавить implicit evidence в метод, чтобы связать T и Column#T

но это будет боль

/me ненастоящий сварщик

Oleksandr
14.12.2017
14:36:13
я не уверен, что это и с шейплесом можно, мб я хочу странного в частности, val int32Encoder = new Encoder[Int]() { override val initialState = Array(new Int32Column(...)) override def encode(t: Int) = { Seq(t: Int32Column#T) } } компилятор ругается [info] Int <: T( forSome { type T <: chdriver.core.columns.Column#T })? [info] Nothing <: Int? [info] true [info] Int <: chdriver.core.columns.Column#T? [info] false [info] false , что как бы логично

Eugene
14.12.2017
14:37:05
а если с другой стороны зайти, и вместо засовывания encoder в отдельный трейт - просто сделать его тайпклассом?

и определить для Int32Column, StringColumn etc?

Oleksandr
14.12.2017
14:37:29
я так и хочу :)

Eugene
14.12.2017
14:38:06
не, ты хочешь чтобы сделать для Seq[Column]

компилятор не осилит понять что там за Seq[Column] в общем случае

Oleksandr
14.12.2017
14:38:35
только усложняется это тем, что обьекты предметной области мапятся на несколько колонок — например, case class Foo(i: Int, s: String) может мапиться на Int32Column, StringColumn

Alexey
14.12.2017
14:39:25
Можно конечно туплами разрулить, но это такое

Eugene
14.12.2017
14:40:00
Foo в данном случае - это Product, чтобы достать из него параметры типов - надо писать макрос или брать Shapeless

Oleksandr
14.12.2017
14:40:44
или попросить энкодер, который уже как-то будет сгенерен

Alexey
14.12.2017
14:40:58
meh

Eugene
14.12.2017
14:41:05
я бы взял макрос и не морочил голову, если не хочется shapeless

это не больно

Google
Oleksandr
14.12.2017
14:41:47
не в боли дело, а в лишней зависимости, и усложнении джава апи

Alexey
14.12.2017
14:42:10
Джава апи и тайпклассы

Eugene
14.12.2017
14:42:29
как мне кажется, в методах initialValue: Seq[Column] и encode: Seq[Column#T] нет никакой возможности связать типами initialValue и encode

Oleksandr
14.12.2017
14:42:31
Джава апи и тайпклассы
вполне норм, просто ещё один аргумент к вызову метода / созданию класса

Alexey
14.12.2017
14:42:58
а макросы?

Eugene
14.12.2017
14:43:05
а если это еще и из джавы вызывать - то ой

БЕГN

Admin
ERROR: S client not available

Oleksandr
14.12.2017
14:43:30
гм, да, надо все как-то проще

или забить на джаву :)

Eugene
14.12.2017
14:43:48
я бы сделал комбо - сделал проще и забил на джаву

Alexey
14.12.2017
14:43:50
Система типов джавки тебя пошлёт куда подальше

Oleksandr
14.12.2017
14:44:19
ладно, буду рыть дальше, спасибо за советы

Eugene
14.12.2017
14:44:51
shapeless - то, что тебе действительно надо если у тебя куча преобразований на case class

остальное будет или криво, или больно

Eugene
14.12.2017
14:58:20
хммм можно ли как-то сделать дефолтный тайпкласс? скажем у меня из всего множества типов только для двух реализованы тайпклассы, для остальных я хочу дефолтный подсунуть... звучит как влажные мечты конечно

Alexey
14.12.2017
14:58:49
Ну вообще не шибко сложно

Eugene
14.12.2017
15:03:43
variance

Eugene
14.12.2017
15:04:24
Да я вроде разобрался спс

Alex
14.12.2017
15:19:18
https://github.com/marcinzh/skutek было?

Google
Alex
14.12.2017
16:04:30
https://twitter.com/milessabin/status/941248412862861312

Daniel
14.12.2017
16:10:56
шейплезз3, скала10

Nikolay
14.12.2017
16:12:17
shapeless 3 на какой scala будет? 2.x или уже dotty?

а Miles уже рассказывал про shapeless 3 на каких-то конференциях?

Dmitry
14.12.2017
16:16:00
Может он как Сысоев

Пилит втихаря уже много лет

И никому не показывает

Alex
14.12.2017
16:17:13
в эту ветку последний коммит 2.5 года назад был :)

Dmitry
14.12.2017
16:17:28
В закрытой репе

Лол

Nikolay
14.12.2017
16:18:07
такой "к черту ваш опенсорс, будет shapeless enterprise версия по подписке, и точка!"

Grigory
14.12.2017
16:18:22
Dmitry
14.12.2017
16:18:26
И бэкпорты

Nikolay
14.12.2017
16:42:00
https://twitter.com/LukaJacobowitz/status/941335776209571840

с scalax обычно быстро видео выкладывают

Alexey
14.12.2017
16:49:46
https://blog.toggl.com/wp-content/uploads/2017/04/toggl-how-to-kill-the-dragon-with-9-programming-languages.jpg

они там ничего не попутали про Cкалу?

Oleg
14.12.2017
19:36:03
https://twitter.com/LukaJacobowitz/status/941335776209571840
т.е. в тайплевельно скале встроенные генерики появятся быстрее, чем в дотти

Nikolay
14.12.2017
20:14:37
https://skillsmatter.com/skillscasts/11104-shapeless-is-dead-long-live-shapeless

вообще есть уже видео

Страница 1146 из 1499