Scala多态函数类型不匹配

问题描述 投票:0回答:1

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

类型不匹配: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类型的函数)

任何有关此事的建议或反馈将不胜感激!

scala functional-programming polymorphism tail-recursion
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.