为何向期望Id[Int]类型的map传入Int仍可正常运行?
为什么传入Int给期望Id[Int]的map方法可行?
嘿,这个问题问得特别到位!其实核心原因藏在Id类型的定义里,让我给你掰扯清楚:
在Scala的函数式编程库(比如Cats)中,Id是一个非常基础的类型别名,它的定义长这样:
type Id[A] = A
简单来说,Id[Int]就是Int的“马甲”——二者是完全等价的类型,编译器会把它们当成同一个东西看待。
所以当你的map方法声明需要接收Id[Int]类型的参数时,你传入普通的Int值,本质上就是传入了符合要求的类型,自然不会有编译错误,程序也能正常运行。
额外补充一句:Id类型的设计目的是为了让我们能写出更通用的代码——比如你可以写一个同时支持Option[Int]、Either[String, Int]和普通Int的方法,用F[Int]作为参数类型,当F指定为Id时,就自动适配普通值的场景啦。
内容的提问来源于stack exchange,提问作者softshipper
相关产品推荐
相关产品推荐

