簡體   English   中英

遞歸期間的多態類型錯誤 - 如何解決?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM