Swift实现泛型memoize函数报错Generic parameter 'Arg' could not be inferred原因?
报错原因
- 核心问题是传入
memoize的闭包存在语法错误,多余嵌套了一层大括号。Swift闭包的标准语法为:参数与返回值声明后接in关键字,直接编写执行逻辑,不需要额外用大括号包裹逻辑部分。 - 你当前的写法实际构造了一个输入为
Foo、输出为() -> String类型闭包的函数,和memoize要求的(Arg) -> Ret参数类型不匹配,因此编译器无法完成泛型参数的自动推断,触发对应报错。
修正方案
直接去掉in后的多余大括号即可正常运行,两种常用写法参考:
- 显式声明闭包参数类型
let foo = memoize({ (x: Foo) -> String in print("miss") return x.a })
- 尾随闭包+显式标注变量类型(更简洁)
let foo: (Foo) -> String = memoize { x in print("miss") return x.a }
内容的提问来源于stack exchange,提问作者david_adler
相关产品推荐
相关产品推荐

