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

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

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

Nick
27.06.2017
07:20:20

Google

Nikita
27.06.2017
07:20:40

Oleg
27.06.2017
07:22:35

Nick
27.06.2017
07:23:06

Oleg
27.06.2017
07:23:51
и графтера
и actorPath

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

Nick
27.06.2017
07:25:51

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

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

Nick
27.06.2017
07:28:31

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

Google

Oleg
27.06.2017
07:29:56

Nikolay
27.06.2017
07:36:05

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
тот же эффект
любопытно, что даже идея подсвечивает деф как "с ворнингом", но не вал

Mikhail
27.06.2017
09:11:32

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

Oleksandr
27.06.2017
09:19:08

Mikhail
27.06.2017
09:19:34

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} тоже по сути функция в рамках спеки и вполне проходит)

Oleksandr
27.06.2017
09:24:27
мб не туда смотрю, конечно

Mikhail
27.06.2017
09:26:27
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

Oleksandr
27.06.2017
09:29:29

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

Oleg
27.06.2017
09:34:33
в супертаггед
никто тут не запилил ньютайпы без субтайпинга?

Admin
ERROR: S client not available

Mikhail
27.06.2017
09:37:05

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

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
легко работает)

Oleg
27.06.2017
10:11:59

Mikhail
27.06.2017
10:13:19
ноу проблемс
мне как раз интероп просто нужен был в первую очередь, полное разделение не требовалось