LINUX.ORG.RU

История изменений

Исправление mazdai, (текущая версия) :

В чем проблема? Делаем метод для сравнения с объектом, инициализированным по умолчанию (или «перегружаем» .eq( в методах класса (при помощи hasattr( или другим образом, не рекомендуется)), получаем на выходе сахар для кода наподобие:

[code=python]

patterns = (

(Node(children=[...]), callback_1),
(Node(children=[...]), callback_2),
...)

<…>.match(src = patterns)

class Asdf: def match(self, src):

    ...

    return patterns[
        tuple(p[0] == self for p in src).index(True)]

[/code]

парсер сломался

но суть в том что не нужно писать бойлерплейт, костыльные функции сравнения и уж тем более ломать встроенные методы

Исходная версия mazdai, :

В чем проблема? Делаем метод для сравнения с объектом, инициализированным по умолчанию (или «перегружаем» .eq( в методах класса (при помощи hasattr( или другим образом, не рекомендуется)), получаем на выходе сахар для кода наподобие:

[code=python]

patterns = (

(Node(children=[...]), callback_1),
(Node(children=[...]), callback_2),
...)

<…>.match(src = patterns)

class Asdf: def match(self, src):

    ...

    return patterns[
        tuple(p[0] == self for p in src).index(True)]

[/code]