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

Swift实现泛型memoize函数报错Generic parameter 'Arg' could not be inferred原因?

报错原因
  • 核心问题是传入memoize的闭包存在语法错误,多余嵌套了一层大括号。Swift闭包的标准语法为:参数与返回值声明后接in关键字,直接编写执行逻辑,不需要额外用大括号包裹逻辑部分。
  • 你当前的写法实际构造了一个输入为Foo、输出为() -> String类型闭包的函数,和memoize要求的(Arg) -> Ret参数类型不匹配,因此编译器无法完成泛型参数的自动推断,触发对应报错。
修正方案

直接去掉in后的多余大括号即可正常运行,两种常用写法参考:

  1. 显式声明闭包参数类型
let foo = memoize({ (x: Foo) -> String in
    print("miss")
    return x.a
})
  1. 尾随闭包+显式标注变量类型(更简洁)
let foo: (Foo) -> String = memoize { x in
    print("miss")
    return x.a
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:24:06