Scala函数与闭包

Scala函数和闭包

方法
定义函数最通用的方法是作为某个对象的成员.这种函数被称为方法(Method).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import scala.io.Source
object LongLines{
def processFile(filename:String,witdh:Int){
val source=Source.fromFile(filename)
for(line <- source.getLines){
processLine(filename,width,line)
}
}

//
private def processLine(filename:String,width:Int,line:String){
if(line.length>width){
println(filename+":"+line.trim)
}
}
}
本地函数
Scala提供一种方式,可以把函数定义在别的函数之内.
1
2
3
4
5
6
7
8
9
10
11
12
def processFile(filename:String,width:Int){
//函数的嵌套
def processLine(filename:String,width:Int,line:String){
if(line.length>width)
print(filename+":"+line)
}
val source =Source.fromFile(filename){
for(line <- source.getLines>){
processLine(filename,width,line)
}
}
}
Scala中的函数
不仅可以定义和调用函数,还可以写成匿名的字面量(literal),并把他们作为值传递.
1
2
3
4
5
6
7
8
9
var increase=(x:Int)=> x+1   //     increase(int x)
increase(10) //11
increase(11) //12


val someNumbers=List(-11,-10,-5,0,5,10)

someNumbers.foreach((x:Int) => println(x))
someNumbers.foreach((x:Int)=> x>0)
占位符用法
1
2
someNumbers.foreach(println(_))
someNumbers.filter(_ > 0)
闭包(closure)
1
2
3
4
5
val addMore=(x:Int) => x + more  //编译不通过  more未定义


var more=1
val addMore=(x:Int) => x + more //如果more变化,则函数也随之变化
可变参数
1
2
3
4
5
def echo(args:String*){     //Java中 void echo(String... args)
for(arg <- args>){
println(arg)
}
}
函数式编程