Desenvolvimento de big data - vários cenários sublinhados por Scala

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 Javamembros semelhantes de variáveis ​​não inicializadas dará um valor padrão, Scalano mesmo, só pode inicializar variáveis ​​de membro, mas precisa usar _ para instruções especiais, para observar que _ se inicializado para se nullespecializar em um tipo de variável, caso contrário, o tipo de variável é Null, A inicialização é apenas para vare 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 Javaa *, 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 settermé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 maisArquivo

Acho que você gosta

Origin blog.csdn.net/hu_lichao/article/details/111464634
Recomendado
Clasificación