[英]Polymorphic type error during recursion - how to solve?
我是 scala 的新手,我正在关注“Scala 中的 FP”一书。 现在我正在为 Stream 数据类型编写展开 function,我正在重新创建它。 问题是,类型检查器告诉我多态类型似乎不适合递归。
这是 Stream 特征及其 static object,包括展开 ZC1C425268E68385D14ZA4:
sealed trait StreamTrait[+A] {}
case object Empty extends StreamTrait[Nothing];
case class Cons[+A](h: () => A, t: () => StreamTrait[A]) extends StreamTrait[A]
object StreamTrait {
def cons[A](hd: => A, tl: => StreamTrait[A]): StreamTrait[A] = {
lazy val head = hd;
lazy val tail = tl;
Cons(() => head, () => tail);
}
def unfold[A, S](z: S)(f: S => Option[(A, S)]): StreamTrait[A] = {
f(z) match {
case None => StreamTrait.empty
case Some(tuple) =>
StreamTrait.cons(tuple._1, unfold[A, S](tuple._2)(f))
}
}
}
output 是:
多态表达式无法实例化为预期类型; 找到:[A(在方法展开中)](f:((A(在方法常量展开中),A(在方法常量展开中)))=>选项[(A(在方法展开中),(A(在方法常量展开中), A(在方法常量Unfold)))])StreamTrait[A(在方法展开)] 需要: StreamTrait[A(在方法常量Unfold)] def constantUnfold[A](a: A): StreamTrait[A] = unlock(a,身份(a));
如果将StreamTrait.empty
替换为Empty
则编译正常。
不知道它是否有效......
似乎我有另一个 function 定义了用错误的参数调用这个展开方法......我很傻,无论如何谢谢:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.