1. 作为通配符,类似Java中的*. 如 import scala.math._
2. :_*作为一个整体,告诉编译器你希望将某个参数当做参数序列处理
val s = sum(1 to 5:_*)就是将 1 to 5 当做参数序列处理
3. 指代一个集合中的两个元素
eg:
例如我们要在一个Array a中筛选出偶数, 并乘以2,可以用以下这个办法
a.filter(_%2==0).map(2*_)
又如要对缓冲数组ArrayBuffer b排序,可以这样:
val bbSorted = b.sorted(_)
4. 在元组中,可以用方法_1,_2,_3访问组员, 例如a._2 其中句点可以用空格替代
5. 使用模式匹配可以用来获取元组的组员,例如
val (first,second,third)=t
但如果不是所有的部件都需要,那么可以在不需要的部件位置上使用_,比如上一例中val(first,second,_)=t
6. 还有一点,下划线_代表的是某一类型的默认值.
var name = _ (前提必须是变量var 不能是val)
对于Int来说,它的默认值为0
对于Double来说,它的默认值是0.0
对于引用类型来说,它是null.
在Scala中无法直接操作方法,如果要操作方法,必须先将其转换为函数,有两种方法:
方法和函数的区别?
0. 答题什么相似,当函数定义在类中,就表示方法,其他的都称为函数
1. 函数可以作为一个参数传入到方法中,而方法就不行
2. 在Scala中无法直接操作方法,如果要操作方法,必须先将其转换成函数,
通常情况下,编译器会自动将方法转换成函数,
1. val fa = m _
//表示将m 方法转换为函数
//在方法名称m后面紧跟一个空格 和下划线 告诉编译器将方法转换成函数,而不是调用这个方法,也可以显示的告诉编译器需要改将这个方法转换成函数
val f1:(int)=>int = m
val l1: Seq[Int] => Int = sum1
print(l1(Array[Int](1, 2, 3, 45)))
3. 函数必须要有参数列表,而方法可以没有参数列表
4. 在函数出现的地方我么你可以提供一个方法
在需要函数的地方,如果传递一个方法,会自动进行ETA展开(把方法转换为函数)
如果我们直接把一个方法赋值给变量会报错,(Missing arguments for method sum1(Int*))
如若我们指定变量的类型就是函数,name就可以通过编译
2. 当然我们也可以强制把一个方法转换给函数, m _ 用Scala中的部分应用函数: