Scala多态函数类型不匹配

时间:2017-12-29 00:41:36

标签: scala functional-programming polymorphism tail-recursion

当试图运行一个抽象的数组类型的多态函数时,我得到一个类型不匹配的错误消息:

  

类型不匹配:预期:(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 =>布尔值的函数)

非常感谢有关此事的任何建议或反馈!

1 个答案:

答案 0 :(得分:3)

问题是你期望一个函数(类型为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)
相关问题