scala – Bizzare类型推理限制 – 多种类型的参数
发布时间:2020-12-16 08:55:54 所属栏目:安全 来源:网络整理
导读:为什么这不编译? trait Lol[A,SA] { def flatMap[B,SB](f: A = Lol[B,SB]): Lol[B,SB] = ???}val p1: Lol[Int,String] = ???val p2: Lol[Double,Nothing] = ???val p5 = p1.flatMap(_ = p2) 结果: found : Int = Lol[Double,Nothing]required: Int = Lol[D
为什么这不编译?
trait Lol[A,SA] { def flatMap[B,SB](f: A => Lol[B,SB]): Lol[B,SB] = ??? } val p1: Lol[Int,String] = ??? val p2: Lol[Double,Nothing] = ??? val p5 = p1.flatMap(_ => p2) 结果: found : Int => Lol[Double,Nothing] required: Int => Lol[Double,SB] val p5 = p1.flatMap(_ => p2) ^ 事情开始编译时: > flatMap调用的类型参数是显式的 然而,上述解决方法对我来说是不可接受的. 解决方法
@ retronym对
SI-9453的评论解释了你所看到的行为.这是一种解决方法……
我们可以合成一个等同于Nothing的类型,它不会导致typer收回推理解决方案, type ReallyNothing = Nothing { type T = Unit } 即.虚拟细化没什么.现在以问题为例, scala> :paste // Entering paste mode (ctrl-D to finish) trait Lol[A,ReallyNothing] = ??? val p5 = p1.flatMap(_ => p2) // Exiting paste mode,now interpreting. scala.NotImplementedError: an implementation is missing at scala.Predef$.$qmark$qmark$qmark(Predef.scala:225) ... 37 elided (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |