Scala:我如何编写sortBy所具有的函数类型?

时间:2012-01-20 10:28:45

标签: scala collections types functional-programming

我想将List.sortBy接受的参数传递给另一个函数。我的代码看起来像这样:

//Scala
def sortAndMore(list: List[(String, _)], sortFn: Option[???] = None) = {
  val maybeSortedList = sortFn match {
    case None => list
    case Some(fn) => list.sortBy(fn)
  }
  // do some more stuff with this list
}

val myList = ("one", 1)::("three", 3)::("two", 2)::Nil
sortAndMore(myList, Some(_._1 /*???*/)) 

所以最后我希望得到与此相同的结果:

myList.sortBy(_._1)

sortAndMore函数中的Option类型是什么?

Scala API for scala.collection.immutable.List说:

def sortBy [B] (f: (A) ⇒ B)(implicit ord: Ordering[B]): List[A] 

我尝试了几件事,但我只是不知道正确的语法,并且猜测它并不幸运。任何提示都非常受欢迎,尤其是指向语法必须如此的指针。

1 个答案:

答案 0 :(得分:2)

这是我的解决方案(在我的终端上编译)

def sortAndMore(list: List[(String,_)], sortFn: Option[((String,_))=>String] = None) = {
  val maybeSortedList = sortFn match {
    case Some(fn) => list.sortBy(fn)
    case None => list
  }
}

sortAndMore(myList, Some(_._1))