scala中:_*的使用和scala中的:: , +:, :+, :::, +++ 等操作

一、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)
  }
}

猜你喜欢

转载自blog.csdn.net/Alex_81D/article/details/129811641