为什么Scala库如此迫切?

时间:2014-08-22 13:28:49

标签: scala functional-programming tail-recursion

看看Scala标准库,我注意到很多函数(方法)都是以命令式的方式编写的:循环比tailrec更常用,等等。 例如:

@inline final override def takeWhile(p: A => Boolean): List[A] = {
    val b = new ListBuffer[A]
    var these = this
    while (!these.isEmpty && p(these.head)) {
      b += these.head
      these = these.tail
    }
    b.toList
   }

可以轻松重写(作为功能):

def takeWhile[A](p:A=>Boolean)(l:List[A]): List[A] ={
@tailrec
def takeWh(p:A=>Boolean,l:List[A],r:List[A]):List[A]={
  if(l.isEmpty) r
  else if(p(l.head)) takeWh(p,l.tail,l.head::r)
  else r
}
takeWh(p,l,Nil).reverse
}

如果Scala应该是一种函数式语言,为什么Scala开发人员更喜欢命令式样式而不是函数?

0 个答案:

没有答案