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

为什么恒等函数会破坏Dart中函数组合的类型推断?

类型推断失效的原因

Dart的泛型参数推断遵循从左到右的单向推导规则,不会基于后续参数的类型约束回溯修正前面的推导结果:

  1. 传入第一个参数incr(类型为int Function(int))时,编译器先确定compose3的泛型参数A = int、B = int
  2. 处理第二个参数泛型函数id<T>时,编译器此时还未读取第三个参数的类型信息,无法确定id的泛型参数T的具体类型,直接默认将compose3的泛型参数C推导为dynamic
  3. 处理第三个参数incr(类型为int Function(int))时,要求泛型参数C为int,和之前推导的dynamic类型冲突,因此抛出类型不匹配错误。

手动嵌套调用时类型推断正常的原因是,嵌套调用是从内到外推导类型,调用id时上下文已经明确输入参数是int,因此id的泛型参数T会自动推断为int,不存在歧义。

解决方案

不需要修改id函数的通用定义,可选以下任意一种方式解决:

  • 调用id时显式指定泛型参数:
var res = compose3(incr, id<int>, incr)(7);
  • 调用compose3时显式指定全部泛型参数:
var res = compose3<int, int, int, int>(incr, id, incr)(7);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:36:03