您的位置:首页 > 编程语言

scala编程-函数与闭包

2015-06-10 09:29 204 查看

3.头等函数

3.1

object foreach_test{

val someNumbers = List(1,2,3,4,5,65)

//所有集合类都能用到的foreach方法。他以函数作为入参,并对每个元素都调用该函数,下面是如何用他打印输出所有列表元素的代码:

someNumbers.foreach((x:Int) => println(x))

}

foreach_test

3.2

object myFilter{

val someNumbers = List(1,2,3,5,7,9)

//集合类的filter方法选择集合里可以通过用户提供的测试的元素。测试时通过调用作为入参的函数实现的

val newList = someNumbers.filter((x:Int) => x > 5)

}

println(myFilter.newList)

4.函数字面量的短格式

4.0

//一种让函数字面量更简短的方式是去除参数类型,某些参数的类型是被推断的

object myFilter{

val someNumbers = List(1,2,3,5,7,9)

//集合类的filter方法选择集合里可以通过用户提供的测试的元素。测试时通过调用作为入参的函数实现的

val newList = someNumbers.filter(x => x > 5)

}

println(myFilter.newList)

5占位符语法

5.0

object myFilter{

val someNumbers = List(1,2,3,5,7,9)

//为了让函数字面量更加简洁,可以把下划线当做一个会更多参数的占位符,只要每个参数在函数字面量内仅出现一次

val newList = someNumbers.filter(_ > 3)

}

println(myFilter.newList)

5.1

错误

val f = _ + _

//有时把下划线当做参数的占位符,编译器可能无法推断缺失的参数类型

//error: missing parameter type for expanded function ((x$1, x$2) => x$1.$plus(x$2))

val f = _ + _

正确

val f = (_: Int) + (_:Int)

6.部分应用函数

6.1

object myforeach{

val someNumbers = List(1,2,34,4,56)

//等价于someNumbers.foreach(x => println(x))

//因此这个例子中的下划线不是单个参数的占位符。他是整个列表的占位符。

someNumbers.foreach(println _)

}

myforeach

以这种方式使用下划线时,你就正在写一个部分应用函数。scala里当你调用函数,传入任何需要的参数,实际是把函数应用的到参数上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: