Спасибо большое за комментарий! Ваши примеры выглядят более "rust"-way, если можно так сказать, и, безусловно, имеют место быть.
В самой статье, примеры на rust иногда, в некоторых местах, сознательно старались приблизить к python версии, чтоб сконцентрировать внимание на определённых деталях и упростить понимание того, что происходит в коде для тех кто с rust не знаком.
Никто аналоги тут не строит, вся эта ветка обсуждения началась с того что мы в статье действительно показали python enum немного однобоко (не такими гибкими).
А к вопросу о том как работают перечисления в расте, вот вам небольшой контрпример:
from dataclasses import dataclass
from enum import Enum
@dataclass
class Pending:
s: str
@dataclass
class Active:
a: int
b: str
class UserStatus(Pending, Active, Enum):
PENDING = Pending("Pending")
ACTIVE = Active(42, "Active")
Это всё достаточно субъективно.
Мне, например, очень не нравится кадый раз обращаться к документации (при условии что она есть) чтобы понять какие типы данных я могу передать в функцию. Это скорее дело привычки и определяется личными приоритетами разработчика.
Это, в целом, достаточно синтетический пример, но не сложно представить чуть более развесистую логику с более сложных форматированием, для получения, например, ключа кеширования. Вариантов решения что в расте что в пайтоне больше одного, рассматривать их все, слишком объёмно. Pattern matching ждём, само собой.
Да, запись трансляции тут: https://youtu.be/78vpPXuwxL0
Именно так, лично пытались. (:
Спасибо большое за комментарий! Ваши примеры выглядят более "rust"-way, если можно так сказать, и, безусловно, имеют место быть.
В самой статье, примеры на rust иногда, в некоторых местах, сознательно старались приблизить к python версии, чтоб сконцентрировать внимание на определённых деталях и упростить понимание того, что происходит в коде для тех кто с rust не знаком.
А почему вы решили что связывание в данном контексте обязательно наследование, а не, например, композиция?
Никто аналоги тут не строит, вся эта ветка обсуждения началась с того что мы в статье действительно показали python enum немного однобоко (не такими гибкими).
А к вопросу о том как работают перечисления в расте, вот вам небольшой контрпример:
Какое отношение имеет структура
Move
к вариантуMessage::Move
?Всё так, Union не делает проверок в runtime.
Если совсем придираться, на мой взгляд, должно быть как-то так:
А почему он должен им быть? Вопрос был в том, можно ли в варианты перечисления засунуть разные структуры (наборы полей).
Да, может
Мне, например, очень не нравится кадый раз обращаться к документации (при условии что она есть) чтобы понять какие типы данных я могу передать в функцию. Это скорее дело привычки и определяется личными приоритетами разработчика.