
Ivan
23.08.2017
21:17:36
страшно представить как это выглядит в скале, есть пример?

Oleksandr
23.08.2017
21:36:23
(вынудил достать ноут)
эт не совсем корректный вопрос, тк тайптеги и ко живут только в компайлтайме, тогда как котлиновская приблуда — только в рантайме
обычно Class нужен не сам по себе, а для сравнения/подстановки куда-то
тем не менее, вот:
def foo[T]()(implicit ev: TypeTag[T]) = ev // достает тайптаг
val tag = foo[String]
tag.mirror.runtimeClass(tag.tpe.typeSymbol.asClass) // выковыриваем искомое, res9: Class[_] = class java.lang.String
тут принципиален вопрос лайфцайкла обоих вариантов
из доки котлина:
Runtime-available types: String, Array<String>, List<*>;
Non-runtime-available types: Nothing, List<String>, List<T> (for any T)

Google

Oleksandr
23.08.2017
21:39:22
в скале же "ничего и не терялось" (с)
скажем, там можно провернуть
def meth[A : TypeTag](xs: List[A]) = typeOf[A] match {
case t if t =:= typeOf[String] => "list of strings"
case t if t <:< typeOf[Foo] => "list of foos"
}
, что в котлине, как я понимаю, невозможно
(List[Foo] отличим от List[Bar] — внутренний тип выковыривается )

Ivan
23.08.2017
21:54:31
в Kotlin'e это сделано на таком уровне, что и читаемость сохраняется и функциональность дается (пусть и нельзя выковарять внутренний тип листа). Проблема решается для некоторых кейсов без каких-либо оверхедов на это решение после компиляции (путь и минимальных). Решение которое портируется и на java 6 без труда. Интересно то, что в сухом остатке TypeTag, как я понял (я вообще никак не работал со скала), это лишь метка, которая не может дать гарантий как и любое JVM приложение, что у тебя каждый элемент списка имеет тот самый тип "A", а значит по степени доверия это равносильно проверке типа у первого элемента.


Oleksandr
23.08.2017
21:57:03
это на вообще другом уровне гарантируется
ты же не будешь от List<Foo> ожидать, что там стринг внутри?)
согласен, что в котлине более частное решение -- что вообще очень показательно по языку
(если что, я ноут убрал и лег спать, так что на вопрос с сложным кодом, если будет, отвечу уже завтра)
бзв, тайптеги прекрасно работают на джава 6, без портирований

Ivan
23.08.2017
22:03:27
ты же не будешь от List<Foo> ожидать, что там стринг внутри?)
я не буду, но и гарантий я не имею) ровно как не имею гарантий того, что в списке строк не окажется Integer) я согласен с тем, что обычно так не делают, но это лишь подтверждает опасения, что для коллекций, например, TypeTag'и вообще не нужны, т.к. достаточно проверить тип первого элемента

Oleksandr
23.08.2017
22:04:37
проверка типа-то в рантайме
патмат по нему, с тайптегом, определяется в компайлтайме

Google

Oleksandr
23.08.2017
22:05:56
в этом как бы и фича)

Ivan
23.08.2017
22:06:00

Oleksandr
23.08.2017
22:13:04
мое регулярное обливание котлина грязью обьясняется в основном тем, что фичи "черрипикнуты" без оглядки на их взаимодействие в глобальном плане
скала, внезапно, в ядре свом состоит из 2-3 ортогональных концепций, на которых строится "магия" (которая вовсе не магия) -- более целостный язык
это: реифайд дженерики, свичкейс, ко-контравариантность, экстеншн методы...

Ivan
23.08.2017
22:15:43
в смысле нет гарантий? оО
по шагам:
1. хранение тайп тега не дает гарантий того, что каждый элемент соответствует этому самому тайпу
2. если мы говорим, что гарантии в том, что тип дженерика коллекции равен типу из тайп тега, то это равносильно тому, чтобы проверить первый элемент коллекции на тип, т.к. это будет ровно с той же силой гарантироваться компилятором
3. на деле польза от тайп тега в этом кейсе это только узнать реальный тип при пустой коллекции, но есть ли в этом смысл
про "без оглядки на их взаимодействие в глобальном плане" не совсем понял. например?

Oleksandr
23.08.2017
22:17:23

Igor
23.08.2017
22:17:42

Oleksandr
23.08.2017
22:20:44
меньше минимальных строительных блоков, я имею в виду

Ivan
23.08.2017
22:21:33
ну да, и для честности на jvm, в принципе, врядли реализуемы гарантии на уровне элементов

Oleksandr
23.08.2017
22:23:21
ты либо указываешь тип, либо компилятор (в меру своих мозгов) его выводит

Ivan
23.08.2017
22:24:02
где там моя шляпа

Oleksandr
23.08.2017
22:25:59
двигаясь дальше, с тайптегами — если тип списка дать как Any (почти Object, чуть шире, включает и примитивы), то проверка на равенство тайптега с, скажем, стрингом провалится
пример с списком не очень удачен, в том плане, что вроде как котлин так же этот кейс нейтрализует

Ivan
23.08.2017
22:28:42

Igor
23.08.2017
22:29:13

Ivan
23.08.2017
22:29:30

Google

Ivan
23.08.2017
22:30:23
ну, т.е. val c = ArrayList<Int>() - compiled, val c = ArrayList() - uncompiled

Oleksandr
23.08.2017
22:30:36
вроде есть ключ компилятору, чтобы он ругался, если вдруг вывел Nothing
по дефолту не проставляется, тк оно иногда бывает полезно

Ivan
23.08.2017
22:34:41
способна ли скала принять из Java List и при этом не проставить ему Nothing? подозреваю, что нет, но вдруг

Oleksandr
23.08.2017
22:36:25
в смысле, List<Foo> foos = ...

Ivan
23.08.2017
22:36:52
можно даже проще
аналогичный каст в скале пройдет?
val a = ArrayList<Int>()
a.add(1)
val w = a as List<String>

Igor
23.08.2017
22:39:06

Oleksandr
23.08.2017
22:39:38

Ivan
23.08.2017
22:46:34
ну т.е. на уровне элементов мы остаемся незащищены, но радует, что чтобы нарушить существующую защиту, нужно быть отбитым человеком
@dveim спасибо за беседу, много нового узнал о скале за этот вечер, доброй ночи

Oleksandr
23.08.2017
22:46:39
на тайптегах можно написать свой "безопасный" каст (в примере выше оные никак не юзались)
на практике, за касты бьют по пальцам, в том числе и в джаве)
взаимно
пора спать, действительно, спокойной ночи)

Oleg
24.08.2017
12:26:13
подскажите со стримами https://pastebin.com/9aebmeKR
есть лист A надо получить лист B, сгруппированный по id c подсчётом сумм quant и передачей type от соответствующего id. Сейчас смог сделать так где type жестко зашит, как передать type соответствующий id

Admin
ERROR: S client not available

Евгений
24.08.2017
12:28:51
а вопрос то в чем?

Oleg
24.08.2017
12:29:47
как передать type соответствующий id в конечный лист

Google

Oleg
24.08.2017
12:30:01
из class A в class B

Daniel
24.08.2017
12:31:16
dependent types не про java

Sherzod
24.08.2017
12:31:49
что это за листоподобный язык?

Oleksandr
24.08.2017
12:44:50
https://www.youtube.com/watch?v=T-8fA3dEUlg

Евгений
24.08.2017
12:46:49
вместо groupBy

Oleg
24.08.2017
12:47:33

Евгений
24.08.2017
12:47:56
это уж как хочешь

Oleg
24.08.2017
12:48:04
спс

Pavel
24.08.2017
13:46:02
Начало в 11 как обычно?

Igor
24.08.2017
13:46:20
Сегодня в 23:00 - 2:00
С 23:00 24 августа до 2:00 25 августа

Pavel
24.08.2017
13:46:55
збс

Baruch
24.08.2017
17:28:41
https://www.youtube.com/watch?v=Z2F-wZKbG8M

_
24.08.2017
17:29:37
Collect(grouping, summing)?

Pavel
24.08.2017
17:30:27
Grouping, summing,mapping=)

_
24.08.2017
17:30:44
Это ответ
))

Ivan
24.08.2017
17:49:09
чем выкатить голый джар в прод? докером просто? или как?
кстати очень незаслуженно проигнорированный вопрос. Мне бы тоже было интересно чем, товарищи, деплоите приложухи. Из того что я знаю:
- war/ear
- rpm,deb и иже с ними
- docker
- через scp и java -jar my-super-application.jar
что забыл?

Google

Ivan
24.08.2017
17:52:54
кстати, а dev ops чатика нет?

Baruch
24.08.2017
19:33:14
DevOps — русскоговорящее сообщество
Общаемся на темы DevOps, мониторинга, метрикам и облакам. Новости.
См. также: @kubernetes_ru, @docker_ru, @rkt_ru, @coreos_ru, @ceph_ru, @openstack_ru
Новости: @devops_news
Вакансии и поиск работы: @devops_jobs
Рекомендуем сразу отключить уведомления.
https://t.me/devops_ru

Pavel
24.08.2017
19:33:42
@JBaruch через полчаса же?

Igor
24.08.2017
20:05:49
почти началось)
https://www.periscope.tv/razbor_poletov/1MYGNXLYVZOxw