Java Scala,我的泛型函数“;findFirst“;不';行不通 对象FPSEx2\u 1{ def阶乘(n:Int):Int={ def go(n:Int,acc:Int):Int={ 如果(n Int)={ val msg=“%d的%s是%d。” 消息格式(名称,n,f(n)) } def findFirst[A](as:Array[A],p:A=>Boolean):Int={ @注释.tailrec def循环(n:Int):Int= 如果(n

Java Scala,我的泛型函数“;findFirst“;不';行不通 对象FPSEx2\u 1{ def阶乘(n:Int):Int={ def go(n:Int,acc:Int):Int={ 如果(n Int)={ val msg=“%d的%s是%d。” 消息格式(名称,n,f(n)) } def findFirst[A](as:Array[A],p:A=>Boolean):Int={ @注释.tailrec def循环(n:Int):Int= 如果(n,java,scala,templates,generics,functional-programming,Java,Scala,Templates,Generics,Functional Programming,因为您的方法findFirst此行中的条件错误: object FPSEx2_1 { def factorial(n: Int) : Int = { def go(n: Int, acc: Int) : Int = { if (n <= 0) acc else go(n-1, n*acc) } go(n, 1) } def fib(n: Int) : Int = {

因为您的方法
findFirst
此行中的条件错误:

object FPSEx2_1 {

    def factorial(n: Int) : Int = {
        def go(n: Int, acc: Int) : Int = {
            if (n <= 0) acc
            else go(n-1, n*acc)
        }
        go(n, 1)
    }
    def fib(n: Int) : Int = {
        @annotation.tailrec
        def go(n:Int, prev: Int, cur: Int): Int = {
            if( n == 0) prev
            else go(n-1, cur, prev + cur)
        }
        go(n, 0,1)
    }
    def formatResult(name: String, n: Int, f:Int => Int) = {
        val msg = "The %s of %d is %d."
        msg.format(name, n, f(n))
    }

    def findFirst[A] (as: Array[A], p: A => Boolean): Int = {
        @annotation.tailrec
        def loop(n: Int) : Int = 
            if (n <= as.length) -1
            else if (p(as(n))) n
            else loop(n + 1)
        loop(0)
    }

    def isPear(p : String) : Boolean = {
        if (p == "pears") true
        else false
    }

    def main(args: Array[String]) : Unit = {
        println("hello word")
        println(factorial(3))
        println(fib(4))
        println(formatResult("factorial", 4, factorial))

        var fruit = Array("apples", "oranges", "pears")

        println(findFirst(fruit, isPear))  // this line prints -1, why doesn 't it work?
    }
}

println (findFirst (fruit, isPear))  

你能解释一下它是怎么不起作用的吗?请重新写一个可以理解的问题。
if (n <= as.length) -1
if (n >= as.length) -1