1. Breve descrição
O sublinhado do Scala quase sempre está inserido em várias gramáticas, sua finalidade é representar algumas ocasiões especiais ou simplificar o código, sem ter que pensar em como nomeá-lo. O seguinte descreve o uso de vários sublinhados
2. _ Quais são as maneiras de usá-lo
2.1 Inicializar variáveis
Com Java
membros semelhantes de variáveis não inicializadas dará um valor padrão, Scala
no mesmo, só pode inicializar variáveis de membro, mas precisa usar _ para instruções especiais, para observar que _ se inicializado para se null
especializar em um tipo de variável, caso contrário, o tipo de variável é Null
, A inicialização é apenas para var
e não pode ser val
. Em outros casos, o uso de variáveis semelhantes a e _ pode obter o efeito da inicialização
// _ 对应的默认值:整型默认值0;浮点型默认值0.0;String与引用类型,默认值null; Boolean默认值false
class Student{
//String类型的默认值为null
var name : String = _
var age: Int = _
var amount: Double = _
var mOrF: Boolean = _
}
2.2 Método para funcionar
A rigor: o que é definido por val é uma função e o que é definido por def é um método. A diferença semântica entre os dois é muito pequena, na maioria dos casos você pode ignorar a diferença entre eles, mas às vezes é necessário entender a conversão entre eles, o método é convertido em uma função da seguinte maneira
scala> def f1 = ()=>{}
scala> val f2 = f1 _
2.3 Pacote de guia
Semelhante Java
a *, você pode importar todo o conteúdo do pacote desta forma
//Scala
import java.util._
//Java
import java.util.*;
2.4 omitir nomes de variáveis em funções de ordem superior
Funções de ordem superior em Scala, como map, collection, count, sortWith, filter, reduce, etc., todas precisam ser passadas em uma função. O nome do parâmetro da função em si não tem propósito especial, portanto, não há necessidade para enredar o nome, use _ em vez de Parâmetros, mas preste atenção aos problemas de uso único e parâmetros múltiplos
val list = List(3,3,5)
list.reduce(_+_) //等同于list.sum()
list.map(_ * 2)
list.filter(_ > 3)
2,5 tuplas de acesso
Use _1, _2 para acessar cada elemento na tupla
val tu = (1,2,3)
tu._1
tu._2
2.6 Converter uma coleção em vários parâmetros
Você pode usar _: * em uma matriz ou coleção para converter em vários parâmetros para uso
def addSum(nums: Int*) = {
nums.sum
}
addSum(1 to 10: _*))
2.7 Implementação do método setter
Defina o setter
método no nome da variável _ way ,
Pode-se ver que _leg é um encapsulamento completo e leg_ é uma versão definida do método leg
class Dog {
private var _leg = 0
def leg: Int = _leg
def leg_=(newLag: Int) = {
_leg = newLag
}
def get() = {
_leg
}
}
object GetterAndSettre {
def main(args: Array[String]): Unit = {
val dog = new Dog
dog.leg_=(4) //等同于 dog.leg = 4 ,都是修改了_leg的值
println(dog.get())
dog.leg = 5
println(dog.get())
}
}
2.8 Uso de algumas funções
Função parcial aplicada (função parcial aplicada) também é chamada de função parcial aplicada e função parcial aplicada se refere a uma função sem alguns (ou mesmo todos) parâmetros. Se uma função tem n parâmetros e fornece menos de n parâmetros, uma função parcialmente aplicada é obtida
// 定义一个函数
def add(x:Int, y:Int, z:Int) = x+y+z
// Int不能省略
def addX = add(1, _:Int, _:Int)
addX(2,3)
addX(3,4)
def addXAndY = add(10, 100, _:Int)
addXAndY(1)
def addZ = add(_:Int, _:Int, 10)
addZ(1,2)
// 省略了全部的参数,下面两个等价。第二个更常用
def add1 = add(_: Int, _: Int, _: Int)
def add2 = add _
2.9 Correspondência de padrões
Na correspondência de padrões, _ pode se referir ao valor padrão. Quando o tipo corresponder, _ pode ser usado e o nome pode ser omitido
val a = 10
a match {
case _: Int => println("Int")
case _ => println("defalult")
}
3. Resumo
Acima falamos principalmente sobre nove usos de _, o que simplifica muito a nomenclatura de variáveis e o processo de desenvolvimento de Scala. Scala é usado para simplificar o código. Também é um curso obrigatório para programadores de Scala. Claro, escrever Scala no estilo Java pode ser mais fácil de entender, haha Haha Wu Xie, Xiao San Ye, um pequeno novato no fundo, big data e inteligência artificial. Por favor, preste atenção a mais