Scala中下划线的7种用法

Scala是一门以java虚拟机(JVM)为运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言。scala 单作为一门语言来看, 非常的简洁高效,在Scala中存在很多让代码更加简洁的语法,下划线“_”便是其中一个。下划线的普遍用法总结如下:

1.  用于变量初始化

在Java中,可以声明变量而不必给出初始值,在Scala中,变量在声明时必须显示指定,可以使用下划线对变量进行初始化。而且该语法只适用于成员变量,不适用于局部变量。例如:

class Student{
    //String类型的默认值为null
    var name : String = _
}

2.  用于导包引入

导包引入时使用_导入该包下所有内容,类比Java中的*。例如:

//Java
import java.util.*;


//Scala
import java.util._

3.  用于将方法转变为函数

在Scala中方法不是值,而函数是。所以一个方法不能赋值给一个val变量,而函数可以。方法可以转换为函数赋值给变量,例如:

//将println方法转换为函数,并赋值给p
var p = println _

4.  用于访问tuple元素,例如:

val t = (1, 2, 3)
println(t._1, t._2, t._3)

5.  用于简写函数

如果函数的参数在函数体只出现一次,则可以用下划线代替。例如:

val nums = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
nums.map(_ + 2)
nums.sortWith(_>_)
nums.filter(_ % 2 == 0)

6.  定义偏函数

调用一个函数,实际上是在一些参数上应用这些函数。如果传递了所有期望的参数,就是对这个函数的完整应用,如果传递的参数比所要求的参数少,就会得到另外一个函数,就被成为偏应用函数。例如:

def showLog(d: Date, log: String): Unit = {
    println("时间:" + d, ",日志信息:" + log)
}
val date = new Date()
//偏应用函数
showLog(date: Date, _: String)

7.  用于模式匹配

模式匹配中可以用下划线来作为Java中default的类比使用,也可以在匹配集合类型时,用于代表集合中元素。

Scala,函数(function)和方法(method)是有一些区别的。 1. 定义方式:函数是通过`val`关键字定义的值,而方法是通过`def`关键字定义的类成员。 2. 形式:函数是一个独立的值,可以直接赋值给变量,作为参数传递给其他函数,或者作为返回值返回。方法则是属于类或对象的成员,需要通过实例或者类名来调用。 3. 参数列表:函数的参数列表可以用括号包裹,也可以省略括号。方法的参数列表总是需要用括号包裹。 4. 调用方式:函数可以直接使用参数列表调用,而方法需要通过对象或者类名来调用。 5. 带有副作用:函数通常是纯函数(pure function),即没有副作用的函数。方法可以有副作用,例如修改对象的状态或者打印输出等。 下面是一个示例来说明函数和方法的区别: ```scala // 定义函数 val add: (Int, Int) => Int = (x, y) => x + y // 定义类,并定义一个方法 class MyClass { def multiply(x: Int, y: Int): Int = x * y } // 创建类的实例 val obj = new MyClass() // 调用函数 val result1 = add(3, 4) println(result1) // 输出: 7 // 调用方法 val result2 = obj.multiply(3, 4) println(result2) // 输出: 12 ``` 需要注意的是,Scala方法可以转换为函数,而函数不能直接转换为方法。可以使用方法引用(method reference)或者使用下划线(_)来将方法转换为函数。例如: ```scala val multiplyFunc: (Int, Int) => Int = obj.multiply val multiplyFunc2: (Int, Int) => Int = obj.multiply _ ``` 总的来说,函数和方法在Scala有些许的差异,但在实际使用,它们可以互相转换和配合使用,根据需要选择合适的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值