Scala多态函数类型不匹配
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala多态函数类型不匹配相关的知识,希望对你有一定的参考价值。
当试图运行抽象的数组类型的多态函数时,我得到一个类型不匹配的错误消息:
类型不匹配:expected:(Int)=> Boolean,actual: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 => Boolean类型的函数)
任何有关此事的建议或反馈将不胜感激!
答案
问题是你期望一个函数(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)
以上是关于Scala多态函数类型不匹配的主要内容,如果未能解决你的问题,请参考以下文章
linux打开终端如何启动scala,如何在终端下运行Scala代码片段?