@kotlin_lang

Страница 497 из 982
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
*раньше работало
Тогда есть смысл написать в kotl.in/issue

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

Андрей
20.01.2018
21:24:38
Тогда есть смысл написать в kotl.in/issue
Так выше бросил же картинку, что работает

Вот. Там где надо, там смарт каст сработал

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
адовая штука
ага учитывая что as не безопасный оператор

а и 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 } }

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

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

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

Даниил
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
а что если предположить что ты потом мож скастить намбер в дабл смарткастом, иль я сечас глупость сказал?
да решения есть и по лучше, но вся эта канитель запустится на другой канители, это все нлайнится, как бы при компиляции все типы и так извесны будут reified. Эту функцию будет вызывать другая которая тоже инлайн с reified

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

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

сколько глупого повторного кода

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

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

или чисто по-приколу?

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

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

ну так в каждой реализации и определяй эти операторы

Андрей
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

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
эмм, никак, потому что переменная и проперти — разные вещи

Страница 497 из 982