Size: a a a

Kotlin Community

2020 December 27

AN

Alexander Nozik in Kotlin Community
+
источник

IP

Iaroslav Postovalov in Kotlin Community
@y9san9 @noraltavir единственно правильным дизайном было бы сделать fun Number.toChar() = toInt().toChar()
источник

AN

Alexander Nozik in Kotlin Community
В жаве хреновый дизайн, в котлин хреновый интероп с этим дизайном
источник

IP

Iaroslav Postovalov in Kotlin Community
Iaroslav Postovalov
@y9san9 @noraltavir единственно правильным дизайном было бы сделать fun Number.toChar() = toInt().toChar()
а в инте иметь toChar ну просто как метод в классе
источник

VP

Vladimir Petrakovich in Kotlin Community
Iaroslav Postovalov
в общем, если не указывать тип, то оно вызовет toChar и получит 42, как и надо. а если указать тип, то оно не будет знать, есть ли там toChar и вставит intValue (который забриджован к toInt), а потом I2C
Это ещё норм, они всё равно должны возвращать одинаковые значения.
Вот исходный баг с NoSuchMethod - это бомба.
источник

IP

Iaroslav Postovalov in Kotlin Community
Vladimir Petrakovich
Это ещё норм, они всё равно должны возвращать одинаковые значения.
Вот исходный баг с NoSuchMethod - это бомба.
это не такая уж бомба, потому что Integer никто не использует
источник

IP

Iaroslav Postovalov in Kotlin Community
но вообще говоря
источник

IP

Iaroslav Postovalov in Kotlin Community
эта же ошибка есть, например, для BigInteger
источник

VP

Vladimir Petrakovich in Kotlin Community
Iaroslav Postovalov
это не такая уж бомба, потому что Integer никто не использует
Компилятор вставил вызов метода, которого нет, ну wtf
источник

IP

Iaroslav Postovalov in Kotlin Community
Vladimir Petrakovich
Компилятор вставил вызов метода, которого нет, ну wtf
wtf, на который тяжело наткнуться. а вот у длинной арифметики таки есть юзкейсов
источник

IP

Iaroslav Postovalov in Kotlin Community
источник

VP

Vladimir Petrakovich in Kotlin Community
Много что почти никто не использует, а потом пишешь что-нибудь и на 1-2 таких прикола обязательно натыкаешься 😒
источник

IP

Iaroslav Postovalov in Kotlin Community
в общем, чем больше копаешься в компиляторе котлина и его багах, тем больше разочароываыаешься
источник

AN

Alexander Nozik in Kotlin Community
К сожалению, конкретно Number-ы проектировались очень давно и теперь надо тащить совместимость. Задизайнить их хорошо вообще сложно. Но вероятно, надо было бы делать вообще с маркерным интерфейсом и конверсией через эктеншены
источник

IP

Iaroslav Postovalov in Kotlin Community
Alexander Nozik
К сожалению, конкретно Number-ы проектировались очень давно и теперь надо тащить совместимость. Задизайнить их хорошо вообще сложно. Но вероятно, надо было бы делать вообще с маркерным интерфейсом и конверсией через эктеншены
так я выше написал, как надо было делать.

class Number {
 fun toInt(): Int
}

class Int : Number {
 fun toChar(): Char
}

fun Number.toChar() = toInt().toChar()
источник

AN

Alexander Nozik in Kotlin Community
Alexander Nozik
К сожалению, конкретно Number-ы проектировались очень давно и теперь надо тащить совместимость. Задизайнить их хорошо вообще сложно. Но вероятно, надо было бы делать вообще с маркерным интерфейсом и конверсией через эктеншены
Или через силед класс, где все кастомные числа вынесены отдельно
источник

AN

Alexander Nozik in Kotlin Community
Iaroslav Postovalov
так я выше написал, как надо было делать.

class Number {
 fun toInt(): Int
}

class Int : Number {
 fun toChar(): Char
}

fun Number.toChar() = toInt().toChar()
Ну это исправляет косяк котлин, но не исправляет исходного дизайна
источник

IP

Iaroslav Postovalov in Kotlin Community
Alexander Nozik
Или через силед класс, где все кастомные числа вынесены отдельно
гораздо сложнее реализовать
источник

AN

Alexander Nozik in Kotlin Community
Iaroslav Postovalov
гораздо сложнее реализовать
Ну так дизайн фундаментальных фич - это не просто.
источник

L

LevT in Kotlin Community
Переслано от LevT
Да, я дошёл до некоего предела,

    val data: = listOf(
       (listOf ("buy" to 2)) to (listOf(50, 465, 100, 8, 557) to "I have enough resources, making you a coffee!"),
       (listOf("buy" to 2, "buy" to 2)) to (listOf(50, 465, 100, 8, 557) to "Sorry, not enough water!"),
       (listOf("buy" to 2, "buy" to 2, "fill" to listOf(1000, 0, 0, 0)) to (listOf(1050, 465, 100, 8, 557) to ""),
       (listOf("buy" to 2, "buy" to 2, "fill" to listOf(1000, 0, 0, 0)), "buy" to 2) to (listOf(700, 390, 80, 7, 564) to "I have enough resources, making you a coffee!")
//        (listOf("buy" to 2, "buy" to 2, "fill" to listOf(1000, 0, 0, 0)), "buy" to 2, "take" to "") to (listOf(700, 390, 80, 7, 564) to "I gave you $564"),
   )

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

Есть запрос на DSL для тестовых данных
Чем здесь в котлине для меня богато?
источник