scala - 递归期间的多态类型错误 - 如何解决?
问题描述
我是 scala 的新手,我正在关注“Scala 中的 FP”一书。现在我正在为我正在重新创建的 Stream 数据类型编写展开函数。问题是,类型检查器告诉我多态类型似乎不适合递归。
这是 Stream 特征及其静态对象,包括展开函数:
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))
}
}
}
输出是:
多态表达式无法实例化为预期类型;找到:[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
编译OK。
不知道它是否有效......
推荐阅读
- android - 三星 S8 上的导航栏可见性
- css - Vue.js vuetify CSS3 无法将 span 元素与按钮中间垂直对齐
- css - 使背景颜色的底部边缘另一种颜色
- android - java.lang.RuntimeException:android.text.TextUtils 中的方法 isEmpty 未模拟
- machine-learning - 在 pytorch 中进行第一次 epoch 训练后系统挂起
- angularjs - Angular-Auth0 和 Requirejs
- python - 使用 Selenium 和 python 为 Instagram 提供上传文件路径
- ios - iPhone 模拟器中的图像不会占用与真实设备上相同的空间
- regex - 正则表达式与 shell 脚本不匹配:sed 's| *移动 *\([^ ]*\) .*|\1|
- javascript - 如何覆盖函数 convertTicksToLabels chartjs