在TranscryptPython-to-JavaScript编译器中实现协程时,我遇到了以下奇怪的问题。在
Transcrypt使用cpython3.6的本机解析器来生成AST。 对于异步全局函数def,它生成一个AsyncFunctionDef节点。 但对于异步方法则不然! 然而,CPython本身似乎正确地编译了异步方法。在
因此,下面的代码是用CPython运行的,但是Transcrypt无法运行它,因为CPython的AST模块生成的AST似乎缺少用于方法的AsyncFunctionDef节点(与全局函数相反)。在
因此,以下代码不生成AsyncFunctionDef节点:
class C:
def __init__ (self):
self.aTime = 2
async def g (self, waw, asio):
print ('g0')
await waw (self.aTime, asio)
print ('g1')
我错过了什么?异步方法是官方支持的,不是吗? 在PEP 492中找不到任何特定内容。在
示例的完整代码是:
^{pr2}$
最终我让解析器正常工作。 我一定是在别的地方阻止了解析。 可能我忘了从树上更高的节点调用
visit
。 不幸的是,我再也不能重现这个问题了。在对于感兴趣的用户,解析器代码位于:
https://github.com/QQuick/Transcrypt/blob/master/transcrypt/modules/org/transcrypt/compiler.py
2045号线。在
最重要的是:Python的ast模块工作得很好,尽管它需要更多的文档。在
有一个(相当紧凑但可用)第三方文档:
https://greentreesnakes.readthedocs.io/en/latest/
相关问题 更多 >
编程相关推荐