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

(对两个集合/数组的操作)

++    ++:    ::: 三个方法均为拼接作用

::: 方法只能用于集合

 

(对列表追加元素)

在序列头部插入元素

     +:  在序列的头部添加一个元素 

     ::  在列表1的头部添加一个元素

     .::  这个是list的一个方法;作用和上面的一样,把元素添加到头部位置

在序列的尾部插入元素

     :+  在序列的尾部添加一个元素

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alex_81D

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值