Scala除了支持方法,还支持函数。方法对对象操作,函数不是。

定义函数

scala> def abs(x:Double)=if(x>=0) x else -x
abs: (x: Double)Double

如果函数体需要多个表达式完成,则可以使用代码块,其中最后一个表达式就是函数的返回值

scala> def fac(n:Int)={
     | var r=1
     | for(i<-1 to n)r=r*i
     | r
     | }
fac: (n: Int)Int

对于递归函数,必须指定返回类型

scala> def fac(n:Int):Int=if(n<=0)1 else n*fac(n-1)
fac: (n: Int)Int

参数

默认参数

scala> def decorate(str:String,left:String="[",right:String="]")=left+str+right
decorate: (str: String, left: String, right: String)String

可以在提供参数值时指定参数名

decorate(left="<<<",str="Hello",right=">>>")

可变长参数

scala> def sum(args:Int*)={
     | var result=0
     | for(arg<-args) result+=arg
     | result
     | }
sum: (args: Int*)Int
val s=sum(1,4,9,16,25)

但是下面的方式是不对的

val s=sum(1 to 5)

应该讲上面区间当做参数序列处理

val s=sum(1 to 5:_*)

实际上,在递归中很可能用到类似处理

def recursiveSum(args:Int*):Int={
  if(args.length==0) 0
  else args.head+recursiveSum(args.tail:_*)
}

过程

Scala对于不返回值的函数有特殊的表示方法,这就是过程(procedure)。

过程不返回值,调用它们仅仅是为了他的副作用。

scala> def box(s:String){
     | var border="-"*s.length+"--\n"
     | println(border+"|"+s+"|\n"+border)
     | }
box: (s: String)Unit
scala> box("YangYue")
---------
|YangYue|
---------

results matching ""

    No results matching ""