
Bogdan
20.01.2018
21:16:44

Dibro
20.01.2018
21:17:29
зачем вообще такое делать, если есть автокаст?

Kirill
20.01.2018
21:17:44
Тебя смущает неправильный type hint? (Или там сам тип неправильно выводится?)

Даниил
20.01.2018
21:18:09
ну думаю да, там же по идее смарт каст должен быть

Google

Bogdan
20.01.2018
21:19:49
hfymit hf,jnfkj
*раньше работало

Dibro
20.01.2018
21:20:40
и не должен, смарт каст работает там, где нужен

Bogdan
20.01.2018
21:21:11

Dibro
20.01.2018
21:21:15
например, если ты захочешь передать это значение в другой метод, принимающий дабл, все сработает

Bogdan
20.01.2018
21:21:25

Kirill
20.01.2018
21:21:37

Bogdan
20.01.2018
21:22:25
последняя
а вот с доков

Kirill
20.01.2018
21:23:29

Google

Kirill
20.01.2018
21:24:00
Хотя подожди

Андрей
20.01.2018
21:24:38
Вот. Там где надо, там смарт каст сработал

Kirill
20.01.2018
21:25:37

Dibro
20.01.2018
21:25:38
именно, он работает КОГДА нужно

Bogdan
20.01.2018
21:25:49

Даниил
20.01.2018
21:26:17
так ты сам придумал вводить дополнительную переменную

Андрей
20.01.2018
21:26:27
А за просто так делать касты не нужно

Dibro
20.01.2018
21:27:04
fun foo(d: Double) = Unit
fun bar(n: Number) {
if (n is Double) {
foo(n) // здесь смарткаст
}
}

Alexei
20.01.2018
21:57:23
вопрос заключался в том что идея не тот тип вывела иль реально код не работал?:

Bogdan
20.01.2018
21:57:54
велосипеды не работают

Андрей
20.01.2018
21:58:30

Bogdan
20.01.2018
21:59:09
вплоть до reified

Андрей
20.01.2018
21:59:49
Так это правильное поведение. Что не так-то?

Bogdan
20.01.2018
22:00:31

Alexei
20.01.2018
22:01:17
а можно тест в студию или это андер нда?)

Google

Bogdan
20.01.2018
22:01:59
да нет
вот ща думаю какой вариант скинуть
пару минут
с костылями но вот
мне нужно вернуть из функции result
а его тип зарание не известен
но он точно Namber

Alexei
20.01.2018
22:10:52
если убрать явные типы то не работает?
вообще есть смысл в переменной т?

Bogdan
20.01.2018
22:12:16
вроде нарыл

Alexei
20.01.2018
22:13:06
так без этого поидее ниже увидит что тебе над для плюса не?

Андрей
20.01.2018
22:13:13
И что с этим кодом не так? (если говорить о смарт-касте, а не о запахе)
Без промежуточной переменной тоже должно все работать

Bogdan
20.01.2018
22:13:47
костыль

Alexei
20.01.2018
22:14:42
адовая штука

Bogdan
20.01.2018
22:14:44
с instanceof выглядело бы красивей

Google

Bogdan
20.01.2018
22:15:13
а и reified R : N не нужен

Alexei
20.01.2018
22:17:09
а можно поинтересоваться глобальной идеей данной затеи?

Даниил
20.01.2018
22:17:19
Bogdan по-моему ты кучу каких-то усложнений на пустом месте придумал
inline fun test(a: Number, b: Number): Number {
return when(a) {
is Double -> a + b.toDouble()
is Int -> a + b.toInt()
else -> 0
}
}

Bogdan
20.01.2018
22:17:33

Даниил
20.01.2018
22:18:00
ок, зачем делать a.toDouble() если ты уже проверил что a is Double

Bogdan
20.01.2018
22:18:00
вот в чем фишка

Даниил
20.01.2018
22:18:08
или новую переменную вводить

Bogdan
20.01.2018
22:18:11

Даниил
20.01.2018
22:18:12
тебе уже десять раз сказали

Bogdan
20.01.2018
22:18:30

Даниил
20.01.2018
22:18:44
именно благодаря смарткасту тебе не нужно ни вводить новую переменную, ни делать toDouble()
и тебе об этом 10 раз сказали уже

Alexei
20.01.2018
22:19:14
а что если предположить что ты потом мож скастить намбер в дабл смарткастом, иль я сечас глупость сказал?

Bogdan
20.01.2018
22:19:16

Google

Dibro
20.01.2018
22:22:42
так, давай сначала, ты хочешь написать метод, который будет возвращать инт, если вызвать его с интом, и дабл, если с даблом. правильно?

Bogdan
20.01.2018
22:22:58
теперь еще каждый оператор добавь
сколько глупого повторного кода

Va
20.01.2018
22:24:27
да и по всем намберам
так нельзя, максимум, ты можешь сделать типизированую функцию, чтобы она тебе возвращала T, и делала касты

Bogdan
20.01.2018
22:27:32

Dibro
20.01.2018
22:29:37
а можно вообще юзкейс такой функции?
или чисто по-приколу?

Bogdan
20.01.2018
22:32:07
или чисто по-приколу?
+- по приколу, у меня есть интерфес где не определеный подтип, он будет извесстен при реализации, но я хочу добавить операторы и другие подобные функции, и по сути мне нужно повторять код меня /,*,+,- и тип

Va
20.01.2018
22:32:43
это статически типизируемый язык, тут так нельзя
ну так в каждой реализации и определяй эти операторы

Bogdan
20.01.2018
22:35:10

Андрей
20.01.2018
22:35:24
Конкретно в таком случае смарт-кастом скастить в N и не получится, так как это опастно. А Котлин сам выполняет только безопасные касты.
Конкретно с интами и даблами прокатит, так как они final классы. Но в общем случае если ты родителя попытаешься скастить в наследника, то получишь класс каст ексепшен в рантайме. Поэтому Котлин сам такое и не делает (на то он и смарт)
Что же касается операторов сложения , то они были бы безопасные, и там явного приведения не нужно. Так Котлин как раз смарт-каст и выполнит.

Bogdan
20.01.2018
22:35:27
10 функций * 5

Va
20.01.2018
22:35:46
если лень — подключай рефлексию
или объясни нормально, что нужно, возможно, ты что-то делаешь не так

Dumitru
20.01.2018
22:36:03
как можно создать кучу переменных с одним var ? :D

Bogdan
20.01.2018
22:36:31

Va
20.01.2018
22:36:36
var (a, b, c, d) = что-то
только если что-то поддерживает destructing declaration

Dumitru
20.01.2018
22:37:01
ну к примеру обычные инты

Va
20.01.2018
22:37:40
эмм, никак, потому что переменная и проперти — разные вещи