Juan-Carlos Gandhi (
juan_gandhi) wrote2021-02-21 01:18 pm
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Entry tags:
вопрос по Котлину
Как вообще определить какой-нибудь, скажем, <code>interface Magma<T></code>, с единственной операцией, чтобы можно было расширять классы, делая их магмами. Те же Int, String, List, все такое. И чтобы можно было вообще писать <code>fun something<T : Magma>(T a, T b) {...}</code>
Пробовал и так и сяк. Что-то не получается, чтобы элементарно. Понятно, что я Котлин еще не усвоил. Но вообще богатый язык. Богатый.
Пробовал и так и сяк. Что-то не получается, чтобы элементарно. Понятно, что я Котлин еще не усвоил. Но вообще богатый язык. Богатый.
no subject
no subject
no subject
Re: на джаве можно добавить интерфейсов String'у и Int'у?
По-моему, там про изменения других классов...
Re: на джаве можно добавить интерфейсов String'у и Int'у?
Моя проблема скорее была в том, чтобы определить
T : Magma
и обеспечивать возможность передавать, например, Int и String. Но теперь я вижу, что это в принципе не должно быть возможно. Операция не уникальна. Можно так, можно так. И поэтому решение как в Arrows правильнее будет.Re: на джаве можно добавить интерфейсов String'у и Int'у?
no subject
no subject
Это типичный type class, Котлин их вроде напрямую не поддерживает, но есть Arrow-kt https://arrow-kt.io/
https://arrow-kt.io/docs/arrow/typeclasses/semigroup/
no subject
Подход оценил, но мне кажется, он дефективен. Вся эта хрень работает только внутри .run()? А расширить класс, чтобы снаружи было доступно. Не, я понимаю проблему. Может быть, так и надо вообще. Может быть, с таким подходом и мои категории будут выглядеть реалистичнее. Надо еще поизучать, шо там в скале-3.