給定一個高階函數,它類型的函數(A,A)=>布爾作爲參數:算上參數化類型Scala中
def isSorted[A](as: Array[A], ordered : (A,A) => Boolean) : Boolean =
{
def doSorted(i: Int) : Boolean =
if (i >= as.length-1) true
else if (ordered(as(i), as(i+1))) false
else doSorted(i+1)
doSorted(0)
}
val lst1 = Array(1,2,3,4,5,6)
我可以聲明一個功能與已知的參數類型和通它在:
def gtr(a : Int, b : Int) : Boolean = {
a > b
}
isSorted(lst1,gtr) /* works :-) */
我想執行以下任一操作。這似乎都不爲我工作:
使用功能與parametrised類型:
def gtr[T](a : T, b : T) : Boolean = { a > b /* gives value > is not a member of type parameter T */ }
這是可能在Scala中。我是否必須告訴編譯器T是從具有>運算符的對象繼承的 ?
可以使用匿名函數:
isSorted(lst1, ((x,y) => x > y)) /* gives missing parameter type */
使用斯卡拉強調魔術打發>運營商
isSorted(lst1, _>_) /* gives missing parameter type */
這三個選項都不爲我工作,我掙扎找出原因。任何人都可以告訴我哪些上述方法在Scala中是有效的,我做錯了什麼。