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多态函数类型不匹配的主要内容,如果未能解决你的问题,请参考以下文章

使用构造函数scala上的模式匹配键入不匹配

linux打开终端如何启动scala,如何在终端下运行Scala代码片段?

Scala系列

Scala中泛型类型的模式匹配

在类型层次结构中,从参数到返回类型的 Scala 类型多态性

类型不匹配与 ArrayLists 中的多态性