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