Pull to refresh
0
0

Пользователь

Send message

Да, запись трансляции тут: https://youtu.be/78vpPXuwxL0

Именно так, лично пытались. (:

Спасибо большое за комментарий! Ваши примеры выглядят более "rust"-way, если можно так сказать, и, безусловно, имеют место быть.
В самой статье, примеры на rust иногда, в некоторых местах, сознательно старались приблизить к python версии, чтоб сконцентрировать внимание на определённых деталях и упростить понимание того, что происходит в коде для тех кто с rust не знаком.

А почему вы решили что связывание в данном контексте обязательно наследование, а не, например, композиция?

Никто аналоги тут не строит, вся эта ветка обсуждения началась с того что мы в статье действительно показали python enum немного однобоко (не такими гибкими).
А к вопросу о том как работают перечисления в расте, вот вам небольшой контрпример:


struct Move(i32, i32);

enum Message {
    Quit,
    Move(Move)
}

Какое отношение имеет структура Move к варианту Message::Move?

Всё так, Union не делает проверок в runtime.
Если совсем придираться, на мой взгляд, должно быть как-то так:


from typing import Optional, Union
class SomeClass:
    message: Optional[Union[Quit, Move, Write, ChangeColor]] = None

А почему он должен им быть? Вопрос был в том, можно ли в варианты перечисления засунуть разные структуры (наборы полей).

Да, может


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 ждём, само собой.

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity