@scala_ru

Страница 1145 из 1499
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
создатели скалы решили, что за распаковку будет отвечать именно unapply в компаньоне
Если точнее, то дело не в компаньоне, а в том чтобы гибче настраивать паттерн матчинг. И val a(x,y) = b это аналог val temp = a.unapply(b); val x = temp._1; val y = temp._2, где a может быть любым объектом (если у него есть подходящий unapply/unapplySeq).

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
я правильно понимаю что нет возможности целиком папку с файлами туда засунуть и получить ASTы
что мешает самому прочитать дерево файлов и скормить скаламете? хотя вопрос на самом деле в другом, с какой целью тебе нужен ast всех этих файлов?

Юрий
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
2 Миша - зависимости между файлами
но зачем? что дальше ты с этим хочешь сделать? и в телеграме можно правой кнопкой тыкнув по сообщению выбрать reply)

Mikhail
14.12.2017
10:39:29
я хочу реализовать что-то похожее на Search and Replace в идее
но ведь в идее уже есть рефакторинг под скалу)

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
Написано же
тут скорее вопрос в том, наш или не наш, на митапы ходит или нет)

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
не понятна проблема с сабскрипшном
я имею в виду, что все равно при сабскрайбе создается новый инстанс каждый раз тогда почему юнит, а не Subscription ?

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

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

и как это дает уверенность?
я к тому, что гарантий вида "после ААА будет вызван БББ с аргументом ССС" нет, везде одни стейтфул воиды

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