• Scala的符号入门


    Spark是由Scala编写的。Spark作为一款十分易用高效的大数据框架使用越来越广泛,Scala也随之有更多的人去学习。
    语言相通,相信有python、java基础的程序员学习Scala并没有太大的难度。但是Scala程序中奇奇怪怪的操作符却让人十分挠头。
    Scala的教程大多都是从变量定义、函数、类等入门,我们直接从Scala符号入门,直接从代码中体会Scala的特性。

    1. 怪符<-

    经常在for循环中的使用,被称生成器(generator)。

    在执行过程中,集合filesHere中(Array[File])的元素将依次赋给file,file类型为File,打印时调用其toString方法将文件名称打印出来。

    val filesHere = (new java.io.File(".")).listFiles
    //直接遍历数组元素
    for (file <- filesHere)
         | println(file)
    
    //间接遍历数组
    for (i <- 0 to filesHere.length - 1)
    println(filesHere(i))
    

    还可以配合 untilif等加入一些限制条件。

    for(i <- res39) println("Iteration"+i)
    
    for(i <- 1 to 5) println("Iteration"+i)
    
    // 这样写看着奇怪,是同楼上一样的
    for(i <- 1 .to(5)) println("Iteration"+i)
    
    //如果不需要5出现,则用until
    scala> for(i <- 1 until 5) println("Iteration"+i)
    
    //加入if条件
    for (file <- filesHere if file.getName.endsWith(".scala"))
    println(file)
    

    2. 怪符->

    这个符号用于Map(映射)。Map是一种可迭代的键值对(key/value)结构。默认情况下 Scala 使用不可变 Map。 如果要使用可变集合,需要显式的引入 import scala.collection.mutable.Map 类

    // 空哈希表,键为字符串,值为整型
    var A:Map[Char,Int] = Map()
    
    // 需要添加 key/value对,可以使用 + 号
    A += ('I' -> 1)
    A += ('J' -> 5)
    A += ('K' -> 10)
    A += ('L' -> 100)
    
    // Map 键值对演示
    val B = Map("red" -> "#FF0000", "azure" -> "#F0FFFF")
    
    //使用 ++ 运算符或 Map.++() 方法来连接两个 Map,Map 合并时会移除重复的 key
    //  ++ 作为运算符
    var ab = A ++ B
    //  ++ 作为方法
    ab = A.++(B)
    

    3. 怪符=>

    类似于转化符号,=> 指明这个函数把左边的东西(任何整数x)转变成右边的东西(x + 1)。所以,这是一个把任何整数x映射为x + 1的函数。有点像匿名函数,匿名函数由参数列表,箭头连接符=>和函数体组成。

    // 定义匿名函数
    val cube = (x: Int) => x * x *x 
    

    (x: Int)是匿名函数的参数,x * x *x 是函数体,箭头连接符=> 连接参数列表和函数体。

    Scala中的=>符号也可以看做是创建函数实例的语法糖。例如:A => TA,B => T表示一个函数的输入参数类型是“A”,“A,B”,返回值类型是T。

    val f: Int => String = myInt => "The value of myInt is: " + myInt.toString()
    println(f(3))
    

    上面例子定义函数f:输入参数是整数类型,返回值是字符串。

    另外,() => T表示函数输入参数为空,而A => Unit则表示函数没有返回值。

    4. 怪符_

    这个和python一样了,是一个程序员懒得命名的变量。有时候也当通配符用的。

  • 相关阅读:
    AI boxfilter
    AI AdaBoost算法
    AI Haar特征
    15.VUE学习之-表单中使用key唯一令牌解决表单值混乱问题
    14.VUE学习之-v-if v-else-if语法在网站注册中的实际应用讲解
    13.VUE学习之控制行内样式
    12.2 VUE学习之-if判断,实践加减input里的值
    12.1.VUE学习之-循环li,if判断示例讲解class中应用表达式
    10.VUE学习之使用lodash库减少watch对后台请求的压力
    09.VUE学习之watch监听属性变化实现类百度搜索栏功能ajax异步请求数据,返回字符串
  • 原文地址:https://www.cnblogs.com/lidyan/p/8989309.html
Copyright © 2020-2023  润新知