@scala_ru

Страница 975 из 1499
Kirill
06.10.2017
09:47:05
Делаешь третий инстанс, который комбинирует эти два
Ну вот, например, такой пример: https://scastie.scala-lang.org/VOF8UBiURKaF8A7VQiPiVw

хочется чтобы можно было имплиситно импортировать инстансы, но при этом использовать те, которые нужно

Nick
06.10.2017
09:48:16
типа один импорт сделать?

Kirill
06.10.2017
09:48:19
ага

Google
Kirill
06.10.2017
09:48:47
чтобы пользователь свой object определил с всеми инстансами, которые ему нужны, импортнул, и использовались эти инстансы

Alexey
06.10.2017
09:49:18
Ну тут теги особо не спасут, лучшим вариантом будет разнести на разные пекеджи эти интсансы

Nick
06.10.2017
09:49:27
String @@ Database ? )

Alexey
06.10.2017
09:49:35
ну или руками подставлять

Kirill
06.10.2017
09:49:44
Вот Ник да, видимо как раз мне тегирование и надо

Alexey
06.10.2017
09:49:56
Ну это уже разные типы :)

Nick
06.10.2017
09:50:01
@eld0727 сделать через теги можно, но над ли

Alexey
06.10.2017
09:50:06
с разными типами конечно проблем нет

Kirill
06.10.2017
09:50:12
так разнесу я на разные пакеты, всё равно их оба импортируешь и в скоупе будет одно и то же

или да, руками )

Но руками не хочу заставлять

Nick
06.10.2017
09:50:49
если они оба будут в скоупе, то не скомпилится ж

Kirill
06.10.2017
09:51:03
вот и я о том же

Google
Nick
06.10.2017
09:51:26
я не вижу проблем в исполозовании конкретного импорта

import kirill.instances.dbLoader

Kirill
06.10.2017
09:51:54
руками имплиситы прописывать, ты имешь в виду?

Alexey
06.10.2017
09:52:08
тогда получится что делаешь тайпкласс для new ResourceLoader[String @@ Database] а не String

Nick
06.10.2017
09:52:28
вместо import kirill.instances._

Alexey
06.10.2017
09:53:42
импортить же можно не только вначале файла { imprort package.db._ use[String]("abc") } { imprort package.disk._ use[String]("abc") }

но это наркота чуть чуть

Kirill
06.10.2017
09:54:05
да, я понимаю, но вот этот код мне не нравится чет визуально )))

Nick
06.10.2017
09:54:25
ну он тебе блок показал

ты можешь прямо в функции импортить)

Alexey
06.10.2017
09:54:43
вообще похорошему в одной функции использовать два интсанса тайпкласса, чутка попахивает

Kirill
06.10.2017
09:54:55
если я хочу сразу же, в следующей строке, вызвать второй раз метод, только с другими инстансом, мне надо либо руками подставлять имплиситы, либо тегать, получается

Nick
06.10.2017
09:54:57
слегка?

Kirill
06.10.2017
09:55:00
да, наверное, попахивает

только как мне избавиться от такого

ну вот в примере хотя бы

Nick
06.10.2017
09:55:29
сделать две разные функции)

Mikhail
06.10.2017
10:08:56
тогда получится что делаешь тайпкласс для new ResourceLoader[String @@ Database] а не String
не над. точнее не обязательно, от кейса зависит. можно тайпкласс и для стринга делать, просто разные. а потом лифтишь до нужного, если очень хочется. (например в случае когда уже готовые тайпклассы есть и нет возможности или смысла править их) val resourceLoaderFromXYZ:ResourceLoader[String] = ??? val resourceLoaderFromDB:ResourceLoader[String] = ??? implicit val r0:ResourceLoader[XYZ] = lift(resourceLoaderFromXYZ) implicit val r1:ResourceLoader[DB] = lift(resourceLoaderFromDB)

Alexey
06.10.2017
10:10:33
какой то магический lift, который создаст мне инстанс нужного типа?

Google
Mikhail
06.10.2017
10:12:35
какой то магический lift, который создаст мне инстанс нужного типа?
не больше магии, чем в тегах) в супертаггед есть пример лифта

он не создает, также тегает просто нужный инстанс

хотя в супертаггед лифтом сам тег-обьект может служить в таком кейсе object DB extends TaggedType[String] val liftedDB = DB( resourceLoaderFromDB )

а почему бы и нет?

None - означает, что нет значения для ключа(или нет ключа в мапе - кому как нравится). Если кто-то положил в мапу ключ со значением нулл - значит ты его оттуда с нулом и достанешь

Nick
06.10.2017
10:21:22
так у него Some(null)

Y
06.10.2017
10:21:36
None - означает, что нет значения для ключа(или нет ключа в мапе - кому как нравится). Если кто-то положил в мапу ключ со значением нулл - значит ты его оттуда с нулом и достанешь
это понятно, но по данному ключу есть case object который, на удивление, как все, единственный из всех null, не думал что оно null, пойду дебажить

Mikhail
06.10.2017
10:21:52
так у него Some(null)
ты забыл, что скаловский гет возвращает опшин, который свидительствует о том - есть такой ключ или нет. ?

если было бы Map[String, Option[Param]] - тогда гет мог бы вернуть "немного(ничего)" - Some(None), что впрочем все равно не помешает засунуть туда по ключу нулл и получить немного нула обратно

Nick
06.10.2017
10:26:51
а

у него просто ключ есть, а значение null

Oleg
06.10.2017
10:40:15
Про "не импортировать ненужное" - эта техника всегда подводила, лучше так не делать и писать код, который будет даже если в скоупе есть все импорты

Alvo
06.10.2017
10:43:21
/stat@combot

Combot
06.10.2017
10:43:21
combot.org/chat/-1001034178083

Grigory
06.10.2017
10:46:21
как-то я просел

отпуск все дела

сместили в рейтинге ироды

Oleg
06.10.2017
10:57:11
сцук, я ж не флужу ничего, почему я в топи

Grigory
06.10.2017
10:57:44
сцук, я ж не флужу ничего, почему я в топи
самый флудераст; пока на пляже лежал в пуш уведомлениях одни твои сообщения

Google
Nick
06.10.2017
11:03:40
@pomadchin у тебя фильтр Нижника включен

Grigory
06.10.2017
11:04:22
@pomadchin у тебя фильтр Нижника включен
ты тоже как-то просел по рейтингу

Nick
06.10.2017
11:04:36
я с тобой в отпуске был)

а если честно, я читал Олега и обдумывал

Daniel
06.10.2017
11:11:13
сцук, я ж не флужу ничего, почему я в топи
ты в топе по активности по флуду там отдельная колонка

Grigory
06.10.2017
11:12:00
ты в топе по активности по флуду там отдельная колонка
причем по активности солидный такой отрыв от ближайшего преследователя

Daniel
06.10.2017
11:12:02
Community health 58% надо методику найти)

Nikita
06.10.2017
11:24:50
Community health 58% надо методику найти)
Это учитывает количество токсичных ответов? :)

Kirill
06.10.2017
13:14:01
Это совершенно излишне. В скале любой может создать унаследовать твой trait и использовать его. В резолве имплиситов более конкретные типы выигрывают
Да, это я понимаю, в результате я не нашёл для себя ничего лучше, чем подавать инстансы тайпкласса руками там где мне в одном и том же скоупе нужны разные инстансы одного типа :(

Oleg
06.10.2017
13:15:01
У меня обычно для таких случаев у typeclass есть отдельный параметр

типа Database[Future, Sys <: System]

case object SystemA extends System case object SystemB extends System

def loadDataFromA[F[_]: Database[?[_], SystemA.type]

ну или как-то так

лучше поконкретнее

теги, конечно, хорошее решение на скорую руку, однако не решают задачу принципиально

Kirill
06.10.2017
13:18:45
типа Database[Future, Sys <: System]
Так я в оригинальном вопросе про это и спрашивал, я так и хотел сделать, типо trait Printable[T, M <: Marker], в инстансах case object M1 extends Marker и использовать как Printable[String, M1].print(), но я подумал что мне сказали что это полная фигня так делать.

Oleg
06.10.2017
13:19:28
мне кажется, что это более корректное решение

Kirill
06.10.2017
13:19:56
А про что мне тогда ответили, когда я спросил про маркер трейт?

Google
Oleg
06.10.2017
13:21:24
ну просто Marker trait звучит как херня из рефлешновского прошлого

на самом деле можно даже без трейта просто trait Printable[T, M]

Alexey
06.10.2017
13:33:28
Я видимо не правильно понял выражение marker trait

Евгений
06.10.2017
15:07:58
https://habrahabr.ru/company/jugru/blog/339524/

ох как хорошо

Vladimir
06.10.2017
15:24:20
Let it begin. The greatest shitstorm of our time!

Alexey
06.10.2017
15:24:58
Пока спокойно

Евгений
06.10.2017
15:38:26
Для желающих переучиться это хорошая возможность уже сейчас изучать язык, который очевидно через два-три года будет популярен.

очевидно

Nikolay
06.10.2017
15:38:51
очевидно

Евгений
06.10.2017
15:39:22
блин, это надо в Го-чатик кидать, а не сюда.

Alexey
06.10.2017
15:40:38
Их там порвёт же

Grigory
06.10.2017
15:40:57
не порвет

они прагматичны вы забыли

Евгений
06.10.2017
15:41:11
судя по отзывам там забаненных, их вообще от всего рвет

Grigory
06.10.2017
15:41:35
слишком мета юмор вбрасывается скалистами а они палками просто закидывают

Nick
06.10.2017
15:41:41
а кого там забанили?

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