Nim定义含auto类型的concept时提示类型为untyped问题排查
故障原因
- 你注释了官方示例中用于绑定泛型参数
A的f.val is A检查行:该行的作用是从Functor实例的成员val推导泛型参数A的具体类型,注释后类型推导链条断裂,后续lambda表达式的返回值无法被正确推断,导致声明为auto的T被识别为untyped类型。 - 低版本Nim对concept内的
auto类型推导存在兼容性问题,建议使用1.6及以上稳定版本运行代码。
修复代码
import sugar, typetraits type Functor[A] {.explain.} = concept f type MatchedGenericType = genericHead(typeof(f)) f.val is A # 取消该行注释,完成泛型参数A的类型绑定 type T = auto map(f, A -> T) is MatchedGenericType[T] import options echo Option[int] is Functor # 运行后将正确输出true proc f(x: Functor) = echo "yes!" f(some(1))
取消f.val is A的注释后,Nim可以从Option[int]的val成员正确推导出A = int,后续map函数的返回类型可以反向推导出T的实际类型,不会再出现回调类型不匹配的错误。
内容的提问来源于stack exchange,提问作者schneiderfelipe
相关产品推荐
相关产品推荐

