Size: a a a

Scheme — русскоязычное сообщество

2021 July 31

a

alez in Scheme — русскоязычное сообщество
Как это нельзя? 3 == 'hello' => False
источник

AP

Aleksei (astynax) Pi... in Scheme — русскоязычное сообщество
Хмм, я или подзабыл, или что :) Но в это всё равно "разные функции" для разных типов
источник

AP

Aleksei (astynax) Pi... in Scheme — русскоязычное сообщество
3.__eq__('hello'), т.е. работает только для типов, умеющих в __eq__
источник

AP

Aleksei (astynax) Pi... in Scheme — русскоязычное сообщество
Это уже не "любые с любыми"
источник

a

alez in Scheme — русскоязычное сообщество
Ты о том что пайтон позволяет делать override для ==? Ну это круто, только не знаю что это меняет, и так диспатч динамический, а по умолчанию там вроде eq (сравнение референсов) с исключениями для примитивных типов
источник

a

alez in Scheme — русскоязычное сообщество
Но по умолчанию все умеют в __eq__ нет?
источник

AP

Aleksei (astynax) Pi... in Scheme — русскоязычное сообщество
нет
источник

a

alez in Scheme — русскоязычное сообщество
А кто не умеет?
источник

AP

Aleksei (astynax) Pi... in Scheme — русскоязычное сообщество
никто не умеет. Только для искоробочных типов есть реализации
источник

AP

Aleksei (astynax) Pi... in Scheme — русскоязычное сообщество
Но это не "умолчательная реализация и перегрузки". Протокол нужно явно реализовывать для всех типов
источник

a

alez in Scheme — русскоязычное сообщество
Окей, я потестил и получается интересно.
Допустим, что новые типы создаются только через class.
Тогда == есть по умолчанию и это сравнение по референциям.
Но `__eq__` выбрасывает NotImplemented

 class Hello:
    def __init__(self):
        pass

Hello() == 3     =>   False
Hello().__eq__(3)     =>   error


В общем, я не знаю пайтон, но выглядит, что сравнивать можно все
источник

AP

Aleksei (astynax) Pi... in Scheme — русскоязычное сообщество
Можно сравнивать то, что было реализовано так, чтобы сравниваться со всем
источник

AP

Aleksei (astynax) Pi... in Scheme — русскоязычное сообщество
Это не "всё что угодно"
источник

AP

Aleksei (astynax) Pi... in Scheme — русскоязычное сообщество
От левого операнда точно требуется наличие метода. Или от правого, если у левого нет
источник

a

alez in Scheme — русскоязычное сообщество
Но реализация по умолчанию есть (если ограничиться до class, по крайней мере). Можно перегрузить так чтобы небыло, и это круто, но к типизации не относится имхо.
источник

AP

Aleksei (astynax) Pi... in Scheme — русскоязычное сообщество
Да нет реализации по умолчанию!
источник

AP

Aleksei (astynax) Pi... in Scheme — русскоязычное сообщество
Есть реализации для конкретных типов
источник

a

alez in Scheme — русскоязычное сообщество
Ну вот я создал новый тип в примере. Для него == работает. Тоесть создалась реализация по умолчанию. Нет?
источник

AP

Aleksei (astynax) Pi... in Scheme — русскоязычное сообщество
Нет
источник

AP

Aleksei (astynax) Pi... in Scheme — русскоязычное сообщество
Это реализация для конкретного класса
источник