簡體   English   中英

Scala多態函數類型不匹配

[英]Scala Polymorphic Function Type Mismatch

嘗試運行抽象化數組類型的多態函數時,出現以下錯誤消息,類型不匹配:

類型不匹配:預期:(Int)=>布爾值,實際:Int

  val listIntegers = List(55, 50, 25, 23, 21, 16, 15)

  def abstractSearchKey[A](a: List[A], p: A => Boolean): Int = {
    def loop(n: Int): Int ={
      if (n > a.length) -1
      else if (p(a(n))) n 
      else loop(n+1)
    }
    loop(0)
  }

  abstractSearchKey[Int](listIntegers, 25)   

我對此錯誤消息感到困惑,因為此練習基於Chiusano的Scala函數式編程。 實際上,在第24頁上,作者指出:

... p函數必須接受類型A的值(因為它是類型A =>布爾值的函數)

任何建議或反饋對此事將不勝感激!

問題是您期望一個函數(類型為Int => Bool的謂詞)作為abstractSearchKey的第二個參數,並且您正在粘貼25 ,它是一個Int

嘗試傳遞一個x => x > 20類的lambda函數,例如,以便能夠使用此謂詞剪切循環:

abstractSearchKey[Int](listIntegers, x => x > 20)

編輯:SergGr從評論中指出,您可能需要此函數: x => x == 25代替,因此可能是:

abstractSearchKey[Int](listIntegers, x => x == 25)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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