我正在编写一个对象序列化程序,但遇到类模式与预期情况不匹配的问题:
def dump_obj(x):
match(x):
case list():
emit('L')
dump_obj(len(x))
for elem in x:
dump_obj(elem)
case Iterable():
emit('I')
dump_obj((type(x), list(x)))
case tuple():
emit('T')
dump_obj(list(x))
case str():
emit('S')
dump_obj(len(x))
emit(x)
case int():
emit('D')
emit(str(x))
case _:
raise TypeError(f'Unknown obj {x!r}')
当我用一个元组调用dump_obj()时,它会在 I-case 上为 iterables 提供无限递归,而不是匹配 T-case 的元组。
当我用列表子类调用dump_obj()时,它匹配列表的 L-case 而不是 iterables 的预期 I-case。