@scala_ru

Страница 771 из 1499
Alexey
27.06.2017
07:18:58
а если просто внутри одного файла, там же все контексто зависимо, тем более таблица

Aleksei
27.06.2017
07:19:02
а если ты гугл и амазон то тогда да кассандра со спарком

Oleg
27.06.2017
07:20:15
а еслт ты никто в скалачате, которому дали домашнее задание распарсить HTML из Кассандры спарком, тогда тоже да

Google
Nikita
27.06.2017
07:20:40
так че там на замену cake pattern-a лучше использовать
это конечно не совсем ответ на твой вопрос, но ознакомиться стоит - https://github.com/davegurnell/99-ways-to-di

Nick
27.06.2017
07:23:06
Oleg
27.06.2017
07:23:51
И спринга
и наносервисов

и графтера

и actorPath

Nikita
27.06.2017
07:25:20
я знаю - вы можете и по делу сказать, не только шутки шутить

Oleg
27.06.2017
07:26:16
звучит, будто шутки - не дело

Nikita
27.06.2017
07:27:40
фп в скале такое продуктивное что остается много времени на полезный чат

звучит, будто шутки - не дело
шутки - очень важное и полезное дело, не спорю

Roman
27.06.2017
07:28:36
Пока оно компилится мы тут шутки и шутим

Google
Vadim
27.06.2017
08:54:15
Google & Stackoverflow driven development мир спасет наш

Denis
27.06.2017
09:00:42
Какой ворнинг?

Oleksandr
27.06.2017
09:03:26
scala> implicit val val_int2str = (i: Int) => {println("val");i.toString} val_int2str: Int => String = <function1> scala> implicit def def_int2str(i: Int) = {println("def");i.toString} <console>:12: warning: implicit conversion method def_int2str should be enabled by making the implicit value scala.language.implicitConversions visible. This can be achieved by adding the import clause 'import scala.language.implicitConversions' or by setting the compiler option -language:implicitConversions. See the Scaladoc for value scala.language.implicitConversions for a discussion why the feature should be explicitly enabled. implicit def def_int2str(i: Int) = {println("def");i.toString} ^ def_int2str: (i: Int)String

в первом случае нет, во втором есть

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

scala> val s: String = 2 val s: String = 2

Alexey
27.06.2017
09:05:58
а какой из двух отрабатывает?

Oleksandr
27.06.2017
09:06:14
первый, val написало

Alexey
27.06.2017
09:06:35
а

Oleksandr
27.06.2017
09:06:41
если поменять порядок обьявления, тоже val

Grigory
27.06.2017
09:07:02
а где эти результаты?

консоль?

Oleksandr
27.06.2017
09:07:06
ага

Grigory
27.06.2017
09:07:12
попробуй компильнуть

консоль та еще

Oleksandr
27.06.2017
09:08:28
тот же эффект

любопытно, что даже идея подсвечивает деф как "с ворнингом", но не вал

Google
Oleksandr
27.06.2017
09:13:01


No return type for implicit function

Mikhail
27.06.2017
09:13:59
аа, так это не как ошибка. а как стайл гайд

Oleksandr
27.06.2017
09:14:30
я о том, что первое-то не подсвечивает, хотя стоило бы

при компиляции другой ворнинг, но, снова, только для def

Nikolay
27.06.2017
09:14:56
А если объявить метод который принимает string и передать туда 2:Int, то какой из них будет использован?

Oleksandr
27.06.2017
09:15:28
никакой, ошибка будет

или ты про "метод который принимает int" ?

Mikhail
27.06.2017
09:16:18
при компиляции другой ворнинг, но, снова, только для def
я честно говоря толи не знал, толи забыл, что можно валом имплисит конвершин обьявить) но у валов есть приоритет перед дефами

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

Mikhail
27.06.2017
09:19:34
в спеке речь только про implicit def
это уже к компилятору. нет проверки на требования разрешить эксплиситли)

Mikhail
27.06.2017
09:20:36
по хорошему оно вобще на амбигуоус должно ругаться, но видимо оно это проверяет в рамках групп по приоритетам. мне так это видится)

Oleksandr
27.06.2017
09:23:54
в дотти ругается на "укажите явно тип для implicit val", но коллизии все равно нет

Mikhail
27.06.2017
09:23:55
в спеке речь только про implicit def
прям в исходной спеке и именно про деф или про имплисит функцию? потому что implicit val val_int2str = (i: Int) => {println("val");i.toString} тоже по сути функция в рамках спеки и вполне проходит)

Mikhail
27.06.2017
09:26:27
https://www.scala-lang.org/files/archive/spec/2.11/07-implicits.html
там нет ограничения на деф. речь идет о доступном методе. деф просто примером в коде идет

defined by an implicit value which has function type SS=>TT or (=>SS)=>TT or by a method convertible to a value of that type.

Google
Oleksandr
27.06.2017
09:28:04
ну тем не менее, обьяснения "почему val приоритетнее" я там не вижу

Mikhail
27.06.2017
09:29:14
ну тем не менее, обьяснения "почему val приоритетнее" я там не вижу
это может быть следствием конкретной реализации внутри

Oleksandr
27.06.2017
09:29:29
Mikhail
27.06.2017
09:30:51
вполне. переиспользования идей и кода мне кажется там хватает. а именно этот случай - не является тем, что дотти решает. почему бы и нет) но проще конечно у тех кто поближе к ним находится - спросить про приоритет валов)

ну и между строк там в спеке вполне это может быть указано, там же никто валы валами и дефы дефами не называет)

Admin
ERROR: S client not available

Mikhail
27.06.2017
09:37:05
я правильно понял, что в твоих типах T @@ X <: T ?
так и есть. и если еще и овертаггет навернуть, то (T @@ X) @@ Y <: T @@ X <: T пример наследования и расширения наследников: https://gist.github.com/Rudogma/12ebcdae41423a76a3f59b70ef28607e

Oleg
27.06.2017
09:38:02
а чем это мешает?
в некоторых странных случаях инстансы не дерайвятся, т.к. они пересекаются с затэганным типом

Mikhail
27.06.2017
09:38:24
никто тут не запилил ньютайпы без субтайпинга?
но тогда и значение перестанет быть исходным типом - это как-то вобще не айс

Oleg
27.06.2017
09:38:41
например? может это решено уже)
так сходу не скопипастишь

но с ньютайпами норм работает

т.е. там, где нет памяти о субтайпинге

Mikhail
27.06.2017
09:39:41
ну вон у сабина есть newtype
type @@[+T, U] = T with Tagged[U] у него же тоже субтайпинг

Oleg
27.06.2017
09:39:47
это tag

Google
Oleg
27.06.2017
09:39:56
а я про newtype

https://github.com/milessabin/shapeless/blob/0904b78eaeb377c3319aae4e343d15b3aba4dc92/core/src/main/scala/shapeless/typeoperators.scala#L36

Mikhail
27.06.2017
09:43:21
так сходу не скопипастишь
если ты накидаешь пример который не работает, то я подумаю почему оно так и как это обойти. потому что пока я не вижу никаких критичных отличий и мне сложно придумать самому такой случай - может пока не наткнулся)

def apply[Repr, Ops](r : Repr) : Newtype[Repr, Ops] = r.asInstanceOf[Any with Newtype[Repr, Ops]] - т.е. на самом деле это все тоже самое, что в супертаггет - тот же Raw with Tag[Raw,Ops] - просто назад возвращается без Raw with, а внутри метода используется asInstance[Any with ...] чтобы не было фактической попытки материализовать with NewType

он там вместо Any with , вполне мог Repr with поставить. тоже самое было бы

Oleg
27.06.2017
09:59:51
tag и newtype служат разным всё-таки целям

Mikhail
27.06.2017
10:00:27
нет, не то же самое
сейчас гляну поближе

Oleg
27.06.2017
10:00:33
в newtype, ты, как видишь определяешь Ops

т.е. каноничное использование - это implicit class Ops(val u: Int) extends AnyVal ....

type MyInt = Newtype[Int, Ops]

тогда MyInt не субтайп Int а

Но у него доступны вот те Ops ы

ща накидаю пример

Mikhail
27.06.2017
10:10:33
нет, не то же самое
да все тоже самое. вот гляди. техника то одна. https://gist.github.com/Rudogma/444b5e87b512398bcbc2921724911a11 понятно, что там есть следствия, но то что он назвал ньютайпом - просто обрезанный тегированный тип без основания. и да, там T with легко работает)

Mikhail
27.06.2017
10:13:19
ещё раз, я понимаю отлично технику тэгов\ньютайпов без боксинга, я говорю о взаимоотношении результирующего типа с исходным
ну так все правильно. если нужен интероп нужно основание. если нужно полностью разделить - не проблема использовать теже супертаггет. если тебе требуется, я могу добавить коммит (доп метод к @@ который на выходе будет разделенный тип выдавать)

ноу проблемс

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

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