вопрос по Котлину
Feb. 21st, 2021 01:18 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Как вообще определить какой-нибудь, скажем, <code>interface Magma<T></code>, с единственной операцией, чтобы можно было расширять классы, делая их магмами. Те же Int, String, List, все такое. И чтобы можно было вообще писать <code>fun something<T : Magma>(T a, T b) {...}</code>
Пробовал и так и сяк. Что-то не получается, чтобы элементарно. Понятно, что я Котлин еще не усвоил. Но вообще богатый язык. Богатый.
Пробовал и так и сяк. Что-то не получается, чтобы элементарно. Понятно, что я Котлин еще не усвоил. Но вообще богатый язык. Богатый.
no subject
Date: 2021-02-21 10:22 pm (UTC)no subject
Date: 2021-02-21 10:36 pm (UTC)no subject
Date: 2021-02-21 10:57 pm (UTC)Re: на джаве можно добавить интерфейсов String'у и Int'у?
Date: 2021-02-22 07:39 am (UTC)По-моему, там про изменения других классов...
Re: на джаве можно добавить интерфейсов String'у и Int'у?
Date: 2021-02-22 03:56 pm (UTC)Моя проблема скорее была в том, чтобы определить
T : Magma
и обеспечивать возможность передавать, например, Int и String. Но теперь я вижу, что это в принципе не должно быть возможно. Операция не уникальна. Можно так, можно так. И поэтому решение как в Arrows правильнее будет.Re: на джаве можно добавить интерфейсов String'у и Int'у?
Date: 2021-02-23 09:46 pm (UTC)no subject
Date: 2021-02-22 07:12 am (UTC)no subject
Date: 2021-02-22 11:33 am (UTC)Это типичный type class, Котлин их вроде напрямую не поддерживает, но есть Arrow-kt https://arrow-kt.io/
https://arrow-kt.io/docs/arrow/typeclasses/semigroup/
no subject
Date: 2021-02-22 03:24 pm (UTC)Подход оценил, но мне кажется, он дефективен. Вся эта хрень работает только внутри .run()? А расширить класс, чтобы снаружи было доступно. Не, я понимаю проблему. Может быть, так и надо вообще. Может быть, с таким подходом и мои категории будут выглядеть реалистичнее. Надо еще поизучать, шо там в скале-3.