You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hy语言中带:async、装饰器的defn如何正确添加类型标注?

Hy中带:async修饰器/装饰器的defn参数类型标注报错的解决方法

问题现象

按照Hy官方文档的defn语法规范,在使用:async修饰器或自定义装饰器的函数定义中,不添加:tp参数类型标注时,异步功能、装饰器逻辑以及返回类型标注都能正常工作。但尝试用:tp语法标注参数类型时,会直接触发HySyntaxError语法错误。

错误示例

以下代码会触发报错:

(defn :async :tp [x int] -> str
  (await (some-async-task x))
  (str x))

最小复现案例

简化后的复现代码:

(defn :async :tp [a int] -> bool
  (await (async.sleep 1))
  (> a 0))

执行上述代码时,Hy解释器会抛出HySyntaxError,提示语法不符合规范。

可行解决方案

放弃使用:tp语法,改为直接在参数前通过#^类型的方式标注参数类型。调整后的代码示例:

(defn :async [#^int a] -> bool
  (await (async.sleep 1))
  (> a 0))

该写法可以正常被Hy编译为对应的Python代码,生成的代码如下:

import asyncio

async def func(a: int) -> bool:
    await asyncio.sleep(1)
    return a > 0

内容的提问来源于stack exchange,提问作者Takis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 14:15:57