почему тело ChainShape не падает на землю?

Я столкнулся с той же проблемой. Я попытался пойти следующим образом: сначала опустил АСТ на некоторое упрощенное представление (дерево dicts):

def simplify(node):
    if isinstance(node, ast.AST):
        res = vars(node).copy()
        for k in 'lineno', 'col_offset', 'ctx':
            res.pop(k, None)
        for k, v in res.iteritems():
            res[k] = simplify(v)
        res['__type__'] = type(node).__name__
        return res
    elif isinstance(node, list):
        return map(simplify, node)
    else:
        return node

, а затем вы можете просто сравнить эти представления:

data = open("/usr/lib/python2.7/ast.py").read()
a1 = ast.parse(data)
a2 = ast.parse(data)
print simplify(a1) == simplify(a2)

даст вам True

EDIT

Просто понял, что нет необходимости создавать dict, поэтому вы можете сделать это только:

def compare_ast(node1, node2):
    if type(node1) is not type(node2):
        return False
    if isinstance(node1, ast.AST):
        for k, v in vars(node1).iteritems():
            if k in ('lineno', 'col_offset', 'ctx'):
                continue
            if not compare_ast(v, getattr(node2, k)):
                return False
        return True
    elif isinstance(node1, list):
        return all(itertools.starmap(compare_ast, itertools.izip(node1, node2)))
    else:
        return node1 == node2
0
задан shubham 18 January 2019 в 14:02
поделиться

1 ответ

Краткий ответ: Формы цепочки не рассчитаны на полную динамику.

Более длинный ответ: В руководстве box2d.org объясняется, что формы Цепи предназначены для построения ваших статических миров. В этом отношении формы цепочек аналогичны формам краев:

они могут сталкиваться с кругами и многоугольниками, но не с самими собой.

Кроме того, они не предназначены для полностью динамического поведения, такого как фигуры, такие как многоугольник.

Надеюсь, что это отвечает на ваш вопрос.

0
ответ дан Louis Langholtz 18 January 2019 в 14:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: