
Diemust
13.12.2017
17:17:54
собрать в батчи или наоборот разобрать поэлементно все стримы умеют

Oleksandr
13.12.2017
17:18:13
Subscriber[Array[T]] имеется в виду?

Diemust
13.12.2017
17:18:41
ну например, да

Oleksandr
13.12.2017
17:20:30
и типа из него уже делать Subscriber[T], если очень хочется по 1 элементу?

Google

Diemust
13.12.2017
17:21:11
но вообще как бы и нет, будет Subscriber[T] всегда, просто T будет либо Array[Smth], либо Smth просто

Oleksandr
13.12.2017
17:21:20
то есть, я имплементирую Publisher[Array[T]], а клиент дальше разбереся?

Diemust
13.12.2017
17:21:34
а то когда пишешь Subscriber[Array[T]] почему-то сразу всё усложняется

Oleksandr
13.12.2017
17:22:40
гм, спасибо, надо плотнее потыкать, может, зря я вообще парюсь про перформанс с поэлементной отдачей
в конце концов, сейчас оно все работает через итератор, который как бы тоже дергает по методу на элемент

Alexander
13.12.2017
17:32:56

Azoyan
13.12.2017
22:24:00
Всем привет! в С++ cейчас можно: class Point { public: int m_x, m_y; };
auto p = Point{25, 66};
auto [x, y] = p; // x = 25, y = 66 я скопировал поля класса в переменные х и у. Как то же самое сделать в scala? Я не понял как работает deconstruction

Aleksey
13.12.2017
22:37:52
val Point(x, y) = p
val p = Point(25,66)
case class Point(x: Int, y: Int)

Azoyan
13.12.2017
22:43:11
ничего не понял. Вот у меня сейчас так class Point(val x: Double, val y: Double) { }
val p = new Point(25,66)

Oleg
13.12.2017
22:44:31
чтобы так сделать, нужен case class

Google

Oleg
13.12.2017
22:46:28
в данном примере
case class Point(x: Double, y: Double)
val p = Point(25, 66)
val Point(x, y) = p
x: Double = 25.0
y: Double = 66.0

Alexander
13.12.2017
22:50:37
либо unapply:
class Point(val x: Double, val y: Double) { }
object Point {
def unapply(p: Point): Option[(Double, Double)] = Some(p.x -> p.y)
}
val p = new Point(25,66)
val Point(x, y) = p

Azoyan
13.12.2017
22:52:43
спасибо
означает ли это, что case перед классом сгенерировал такой же unapply как ты привел?

Alexander
13.12.2017
22:56:59
да, так и есть

Azoyan
13.12.2017
22:57:29
а почему код unapply() отдельно от класса?

Artem
13.12.2017
22:58:48
объект компаньон просто

Oleg
13.12.2017
23:00:14
object Point - это compainion object, соответсвующий классу Point, методы apply и unapply должны быть определены внутри него, это похоже на статические методы в ооп языках

Azoyan
13.12.2017
23:05:21
я кажется понял, это же что static ResultType unapply(Point p) { ... } ?

Oleg
13.12.2017
23:07:02
наверное, можно и так сказать, он не принимает this, вместо этого он явно принимает p

Azoyan
13.12.2017
23:07:32
ну да

Aleksey
13.12.2017
23:09:27
Можно case class и тогда скала сама генерит анапалай. Обычно все так и делают.

Azoyan
13.12.2017
23:10:01
так вот смотрите, мне как раз нужен this, ведь в конкретном экземпляре уже инициализированы поля х и y
то есть надо реализовать def unapply() внутри класса
class Point(val x: Double, val y: Double) {
def unapply()
{
}
}
val p = new Point(25,66)
// ? ? ? ? code
println(x+y)

Oleksandr
13.12.2017
23:13:20
http://danielwestheide.com/blog/2012/11/21/the-neophytes-guide-to-scala-part-1-extractors.html
и 2

Oleg
13.12.2017
23:15:05
создатели скалы решили, что за распаковку будет отвечать именно unapply в компаньоне

Azoyan
13.12.2017
23:17:34
aaa, вон оно что

Google

Alexander
13.12.2017
23:20:00

Oleg
13.12.2017
23:21:06

Alexander
13.12.2017
23:21:17
Не суть )
a.unapply(b).getOrElse(new MatchError) :D

Юрий
14.12.2017
02:53:19
Вообще говоря, unapply можно сделать и внутри обычных инсттансов. Так работают регулярки например

Kos
14.12.2017
10:27:26
Не смог найти в поиске по истории ничего о Scala-meta
кто-то разбирался ?
я правильно понимаю что нет возможности целиком папку с файлами туда засунуть и получить ASTы
я немного игрался с .net Roslyn API - там есть семантическая модель и разная чепуха прочая. Тоесть для вызова метода - можно сразу найти его определение. (Именно то которое видит компилятор. а не просто по имени)

Юрий
14.12.2017
10:30:01
В scalameta сейчас есть semantic db, который, насколько я понимаю, делает тоже самое
но я туда не лазил подробно, не было надобности
вообще, есть тулзы, которые делают именно так, как ты говоришь - указываешь им папку а они там свою магию делают

Юрий
14.12.2017
10:30:46
так что если этого и нет в самой scalameta, это можно сделать

Kos
14.12.2017
10:31:36
ок, я нашёл только одну такую и там был какой-то странный хак с прибиванием аннотаций к классам чуть ли не регэкспами если я всё правильно понял
подскажи пожалуйста названия этих тулзовин
и спасибо за оперативный ответ

Mikhail
14.12.2017
10:34:40

Юрий
14.12.2017
10:34:56
scalafix и scalafmt

Kos
14.12.2017
10:35:13
2 Миша - зависимости между файлами
2 Юрий, спасибо

Google

Юрий
14.12.2017
10:35:25
это прям классические примеры, потому что пилится теми же людьми, которые делают скаламету

Mikhail
14.12.2017
10:36:41

Kos
14.12.2017
10:38:32

Mikhail
14.12.2017
10:39:29

Kos
14.12.2017
10:39:48
это хобби прожект )

Александр
14.12.2017
10:42:55
часик в радость

Admin
ERROR: S client not available

Александр
14.12.2017
10:43:03
есть кто опыт работы с gatling ?

Юрий
14.12.2017
10:45:09
лучше сразу вопрос задавай

Александр
14.12.2017
10:49:40
забываю чет об этом, там можно без костылей делать много запросов типо /const1/consta2/$random/consta3
чтобы random разные были

Alexey
14.12.2017
10:50:35
Ну можно типо подготовить набор данных для теста
Еще можно делать вызов внутри exec и подставлять там чо хошь
https://habrahabr.ru/company/tinkoff/blog/323316/

Nick
14.12.2017
11:03:08

Alexey
14.12.2017
11:03:23
Написано же
Да даже в превью написано

Aleksei
14.12.2017
11:03:55
да даже в превью ссылки видно кто автор
собака вообще охренел
просто не читает ничего

Google

Nick
14.12.2017
11:07:18
Написано же
тут скорее вопрос в том, наш или не наш, на митапы ходит или нет)

Alexey
14.12.2017
11:07:42
вроде

Oleksandr
14.12.2017
11:58:28
по reactivestreams — почему void Publisher.subscribe(), а не Subscription Publisher.subscribe() ?
A Subscription is shared by exactly one Publisher and one Subscriber for the purpose of mediating the data exchange between this pair. — ответ из доки, но это какая-то фигня вида "солнце светит, поэтому надо сделать вот так"
получается, что надо процессору самому готовить сабскрипшн каждый раз, что как-то стремно

Yuriy
14.12.2017
12:58:23
попробуй monix
там ничо сделано, но тоже уныленько

Oleksandr
14.12.2017
13:00:41
мне надо универсальное нечто, на основе чего можно было бы клепать интеграцию с разными стримилками
чем, вроде как, reactive-streams и является

Yuriy
14.12.2017
13:01:49
ну это reactive-streams это вроде концепт

Oleksandr
14.12.2017
13:01:53
то есть:
есть библиотека (драйвер для бд)
хочется сделать её использование максимально удобным, и не изобретать велосипеды

Alexander
14.12.2017
13:01:57
не понятна проблема с сабскрипшном

Yuriy
14.12.2017
13:01:59
а есть имплементации

Oleksandr
14.12.2017
13:03:18
а есть имплементации
да, и, если я сделаю соответствующие паблишеры/сабскрайберы, то интеграция со всеми этими имплементациями будет очень простой

Alexander
14.12.2017
13:06:52

Oleksandr
14.12.2017
13:07:11
к слову, нету никаких способов проверить соответствие спеке, кроме как вдумчиво руками проверять каждый пункт?