【发布时间】:2021-07-27 06:23:59
【问题描述】:
我们有一些异步属性(使用@property)和一些常用的。我们必须使用 hy 来检查一个是否是异步的,或者不使用 asyncio.iscoroutine 函数。问题是我们必须使用 getattr 而不是 。运算符,因为 dot 将调用属性内部函数。我们希望在不破坏其他项目中使用的 DSL 的情况下更改我们的 hy 代码,也就是说,我们不想对属性名称使用字符串表示法(双引号),因此我们需要编写一些像 .但在内部调用 getattr。
=> (defmacro attr [obj attr] `(getattr ~obj '~attr))
=> (attr 5 real)
Traceback (most recent call last):
File "stdin-5bbedde10a6366314d9be4bd343639582b4d0748", line 1, in <module>
(attr 5 real)
AttributeError: 'int' object has no attribute 'real'
=> (. 5 real)
5
【问题讨论】:
-
等效的 defmacro 在 Hissp 中运行良好。您可能需要将 attr 转换为字符串以使其在 Hy 中工作,而不仅仅是引用它。符号与 Hy 中的字符串不同。
-
Hy 的确切版本是什么?最近变化很大,所以我们想在同一个版本上进行测试。
-
@gilch 我们使用的是 hy 1.0.a3,我们不能在宏参数中使用字符串,因为我们希望保持与其他代码的兼容性,使用这个宏来处理非异步代码。
标签: async-await macros python-asyncio hy