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的一个方法;作用和上面的一样,把元素添加到头部位置

在序列的尾部插入元素

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

scala是一门以java虚拟机(JVM)为目标运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言。 scala是纯粹的面向对象的语言。java虽然是面向对象的语言,但是它不是纯粹的,因为java的基本数据类型不是类,并且在java还有静态成员变量和静态方法。相反,scala是纯粹面向对象的,每个值都是对象,每个操作都是方法调用。 scala也是一个成熟的函数式语言。函数式编程有两个指导思想:①函数是头等值,也就是说函数也是值,并且和其他类型(如整数、字符串等)处于同一地位,函数可以被当作参数传递,也可以被当作返回值返回,还可以在函数定义函数等等;②程序的操作应该把输入值映射为输出值而不是就地修改,也就是说函数调用不应产生副作用,虽然函数式编程语言鼓励使用“无副作用”的方法,但是scala并不强制你必须这么做。scala允许你使用指令式的编程风格,但是随着你对scala的深入了解,你可能会更倾向于一种更为函数式的编程风格。向函数式编程转变,你就应该尽量去使用val、不可变对象、无副作用方法,而不是var、可变对象、有副作用方法。要明白的是,从指令式编程向函数式编程的转变会很困难,因此你要做好充分的准备,并不断的努力。 scala运行于JVM之上,并且它可以访问任何的java类库并且与java框架进行互操作scala也大量重用了java类型和类库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Alex_81D

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

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

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

打赏作者

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

抵扣说明:

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

余额充值