scala 除了支持方法(方法是对object的操作,也就是java中定义的class的方法)外还支持函数的; C/C++、Python 也有函数, 而在Java中我们只能通过静态方法来模拟。
函数
函数定义
要定义一个函数,你要给出函数的名称、参数和函数体 ; 例如:
def fac(x:Int) = {
var result = 1
for (i <- 1 to x) result = result * i
result
}
你必须给出所有参数的类型。 不过,只要函数不是递归的,你就不需要指定返回类型, scala 会根据 = 号右边的表达式推导出返回的类型。或进行显式定义为:
def fac(x:Int) :Int = {
var result = 1
for (i <- 1 to x) result = result * i
result
}
注: 本例中不需要使用return,当然我们也可以使用return来立即从函数中退出, 不过在scala中使用return并不常见, 我们最好要适应没有return的日子, 我们可以把 return 当做 函数版本的 break 语句, 仅在需要时进行调用。
默认参数和带名参数
我们在调用某些函数时不显式的给出所有参数值,对于这些函数可以使用默认值:
scala> def show(msg:String, left:String="[", right:String="]"){
| println("%s%s%s".format(left, msg, right))
| }
show: (msg: String, left: String, right: String)Unit
scala> show("hello") // 调用方式1
[hello]
scala> show("hello", "<", ">") // 调用方式2
<hello>
scala> show(left ="info[", msg ="hello") // 调用方式3
info[hello]
注: 这里定义的函数在Scala中被称为过程; Scala 对于不返回值的函数有特殊的表示法, 如果函数体包含在 {} 中但前面没有 = 号, 那么返回的类型为Unit。 这种函数被称为 过程(procedure) , 也可以显式定义为 Unit返回类型:
def show( ... ): Unit = {
......
}
不定长参数
实现一个可变长参数的函数, 例如:
scala> def show(args: Any *){
| for (arg <- args){
| arg match {
| case i: Int =>
| println("type int: %d".format(i))
| case s: String &#