
Timophei
03.10.2018
11:04:11

Nikita
03.10.2018
11:04:39
Превратить котлин в скалу - плохая идея

OlegKrikun
03.10.2018
11:04:44
Срачи сюда https://t.me/pofftop

Igor
03.10.2018
11:04:48
@pofftop (сейчас как удалим все ?)

Google

Сергей
03.10.2018
11:05:17
Создайте чат @fp_jvm и туда всех?

Nameless
03.10.2018
11:05:30

Egor
03.10.2018
11:05:38

Nameless
03.10.2018
11:05:49
И там обсуждения как здорово без циклов а 2к18 (кек)

Mikhail
03.10.2018
11:06:11

Alexandr
03.10.2018
11:06:13

Nikita
03.10.2018
11:06:34
Пытаются
Там POC тайпклассов в котлине выкатили https://github.com/arrow-kt/kotlin/pull/6

Mikhail
03.10.2018
11:06:35

Andrew
03.10.2018
11:06:39

Egor
03.10.2018
11:07:01
@fp_jvm погнали, пацаны

Andrew
03.10.2018
11:07:01
Ибо им-то хорошо житься будет, а всем остальным резко станет грустно.

Google

Alexandr
03.10.2018
11:07:02

Mikhail
03.10.2018
11:08:01
типоклассы вполне себе оопешная штука, это просто адаптер для интерфейса

Egor
03.10.2018
11:08:11

Mikhail
03.10.2018
11:08:37
никто ведь не протестует против дополнительной поддержки паттерна делегации в котлине

Nikita
03.10.2018
11:08:42

Alexandr
03.10.2018
11:08:57

Nikita
03.10.2018
11:10:27

Alexandr
03.10.2018
11:14:28
а, вот про имплиситы сразу не увидел
вон отсюда arrow)

Kirill
03.10.2018
11:14:55

Alexey
03.10.2018
11:17:43

Kirill
03.10.2018
11:19:22
Синтаксисом криваярожажпг

Mikhail
03.10.2018
11:19:44

Alexey
03.10.2018
11:20:09

Сергей
03.10.2018
11:21:53

Alexey
03.10.2018
11:26:56
Исключение?
Да как бы у скалистов вообще не печёт от котлина

Celt
03.10.2018
11:37:33

Andrey
03.10.2018
11:37:43
Не, ну погодите. Тайп классы - это тайп классы. Имплиситы - это имплиситы. Не надо мух с котлетами смешивать.
Тайп классы про реализацию контрактов по месту. Есть у тебя контракт (интерфейс, он же тайп класс) A, есть класс B. Ты описываешь, как классом B реализуется контракт A и можешь везде, где требуется A
использовать B. При этом декларацию класса B ты не модифицируешь.
Имплиситы про динамическое связывание свободных переменных в лямбдах (подробнее не скажу, ещё не копал особо эту тему в haskell, так как там она в рамках language extension сделана).

Google

Kirill
03.10.2018
11:40:24

Egor
03.10.2018
11:40:45

Mikhail
03.10.2018
11:43:02

Andrey
03.10.2018
11:46:05

Kirill
03.10.2018
11:48:09
у тебя нет _явной_ функции из тайпкласса D на объекте класса C
и тем более ты нигде _явно_ не прописываешь что для вызова этой функции ты используешь конкретный инстанс тайпкласса

Andrey
03.10.2018
11:51:25
Ты же на вызове используешь конкретный инстанс с конкретным типом, которому соответствует конкретный инстанс тайп класса.

Kirill
03.10.2018
11:53:44
нет
у тебя просто "появляется" метод на классе A из тайпкласса B

Andrey
03.10.2018
11:55:15

Andrey
03.10.2018
11:56:08
Он не из ниоткуда магически "появляется". Он из вполне конкретной и единственной декларации появляется.

Kirill
03.10.2018
11:56:49
ты его декларируешь в тайпклассе и реализуешь в каком-то инстансе не понятно где
ну и:
myClassInstance.methodFromTypeClass() // не явно
with(typeClassInstance) { myClassInstance.methodFromTypeClass() } // явно

Andrey
03.10.2018
12:09:18
Декларация instance A(B) у нас единственная, это компилятор вполне может проверить.

Kirill
03.10.2018
12:24:53
неявность в том что ты ЯВНО не указываешь что printFoo у теья от тайпкласса и тем более не указываешь инстанс
extension функции внезапно тоже не явные

Andrey
03.10.2018
12:27:17

Google

Kirill
03.10.2018
12:27:50
тогда иплиситы в скале - явные
это пожалуй всё что я могу на эту тему ещё написать

Andrey
03.10.2018
12:31:26
тогда иплиситы в скале - явные
Нет. Имплиситы как раз неявные, так как описывают, какой конкретный инстанс использовать по умолчанию вместо тайп класса.
А в моём примере выше имплиситов и прочих дефолтов нет.
Неявным он станет, если написать
default A = b
...
printFoo()
Вот тут уже для printFoo ресисвер определяется неявно.

Kirill
03.10.2018
12:32:29

Andrey
03.10.2018
12:34:05

Roman
03.10.2018
12:35:05
в классе есть такая штука
private val api: Rest by inject()
Хочу это замокать. В голову приходит вариант сделать это как
var api: Rest by inject()
а в тесте подменить
controller.api = mock
Есть ли другие варианты ?

Andrey
03.10.2018
12:35:56

Andrew
03.10.2018
12:36:15

Admin
ERROR: S client not available

Kirill
03.10.2018
12:36:43

Igor
03.10.2018
12:37:49

Roman
03.10.2018
12:39:06

Andrey
03.10.2018
12:42:57

Kirill
03.10.2018
12:43:15
если в кратце то - нет

Жабра
03.10.2018
12:43:53
Вроде должно

Roman
03.10.2018
12:52:06
Вроде должно
это tornadoFX
class HomeController : Controller() {
private val api: Rest by inject()
где inject
inline fun <reified T> inject(
overrideScope: Scope = scope,
vararg params: Pair<String, Any?>
): ReadOnlyProperty<Component, T>
where T : Component, T : ScopedInstance
= inject(overrideScope, params.toMap())
пока не представляю как замокать ?

Жабра
03.10.2018
12:52:41

Quantum Harmonizer
03.10.2018
12:56:41

Igor
03.10.2018
13:45:30

Google

Roman
03.10.2018
13:46:00
А то как-то "нечисто" по-моему с таким подходом

Bogdan
03.10.2018
13:51:09

terancet
03.10.2018
14:04:55

Bogdan
03.10.2018
14:06:31

Igor
03.10.2018
14:10:03

Nameless
03.10.2018
14:10:34

Igor
03.10.2018
14:13:02
Если мы говорим, про di-framework (аля koin/kodein/dagger2), то он нужен что бы ручками граф не собирать.
А для тестов - достаточно зависимости в конструктор принимать.

Bogdan
03.10.2018
14:13:30

Vladimir
03.10.2018
14:37:54

Arcady
03.10.2018
15:14:00
Аналог scalameta для котлина уже есть?

Leonid
03.10.2018
15:45:56
Нет, для этого же нужно компилятор шатать

Kirill
03.10.2018
15:49:33

Leonid
03.10.2018
15:52:02

Kirill
03.10.2018
15:55:02

dimiii
03.10.2018
15:55:53
В dotty же нет макросов? Их деликатно перенесли в расширения, а оттуда еще подальше?

Alexey
03.10.2018
16:01:56

Жабра
03.10.2018
17:13:50
Подскажите, плиз: что за * в синтаксисе? Типа *args

Quantum Harmonizer
03.10.2018
17:14:04
arrayOf(a, b, c) == arrayOf(*arrayOf(a, b), c)