一、scala中:_*的使用
Scala 允许函数的最后一个参数可以是重复的。这可以允许用户向函数传入可变长度参数列表。想要声明一个重复参数,在参数的类型之后放一个星号。
1.计算1到4的和
def main(args: Array[String]): Unit = {
val total = sum(1,2,3,4)
println(total)
}
def sum(args: Int*) = {
var result = 0
for (arg <- args) result += arg
result
}
2.使用:_*
def main(args: Array[String]): Unit = {
val total = sum(1 to 5)
println(total)
}
def sum(args: Int*) = {
var result = 0
for (arg <- args) result += arg
result
}
报错是:
Error:(4, 26) type mismatch;
found : scala.collection.immutable.Range.Inclusive
required: Int
val total = sum(1 to 5)
要实现这个功能,需要在数组参数后添加一个冒号和一个 _* 符号 这个写法告诉编译器把 arr 的每个元素当作参数,而不是当作单一的参数传给方法 在上述代码中,可以使用:_*
def main(args: Array[String]): Unit = {
val total = sum(1 to 4:_*)
println(total)
}
//变长参数
def sum(args: Int*) = {
var result = 0
for (arg <- args) result += arg
result
}
3. :_*作为一个整体
:_*作为一个整体,告诉编译器你希望将某个参数当作参数序列处理!例如val s = sum(1 to 4:_*)就是将1 to 5当作参数序列处理。
https://shuqi.blog.csdn.net/article/details/113245405
为什么Scala的toSeq会将不可变的Set转换为可变的ArrayBuffer? | 码农家园
二、scala中的:: , +:, :+, :::, +++, 等操作
初学scala者肯定会对:: , +:, :+, :::, +++,这些操作有些疑惑,今天总结一下,方便大家的使用
/**
* scala中的:: , +:, :+, :::, +++, 等操作;
*/
object listTest {
def main(args: Array[String]): Unit = {
val list = List(1,2,3)
// :: 用于的是向队列的头部追加数据,产生新的列表, x::list,x就会添加到list的头部
println(4 :: list) //输出: List(4, 1, 2, 3)
// .:: 这个是list的一个方法;作用和上面的一样,把元素添加到头部位置; list.::(x);
println( list.:: (5)) //输出: List(5, 1, 2, 3)
// :+ 用于在list尾部追加元素; list :+ x;
println(list :+ 6) //输出: List(1, 2, 3, 6)
// +: 用于在list的头部添加元素;
val list2 = "A"+:"B"+:Nil //Nil Nil是一个空的List,定义为List[Nothing]
println(list2) //输出: List(A, B)
// ::: 用于连接两个List类型的集合 list ::: list2
println(list ::: list2) //输出: List(1, 2, 3, A, B)
// ++ 用于连接两个集合,list ++ list2
println(list ++ list2) //输出: List(1, 2, 3, A, B)
}
}
(对两个集合/数组的操作)
++ ++: ::: 三个方法均为拼接作用
::: 方法只能用于集合
(对列表追加元素)
在序列头部插入元素
+: 在序列的头部添加一个元素
:: 在列表1的头部添加一个元素
.:: 这个是list的一个方法;作用和上面的一样,把元素添加到头部位置
在序列的尾部插入元素
:+ 在序列的尾部添加一个元素