• scala学习笔记(1):基本语法与容器


    1 var 可变,val 不可变

    var (a,b) = (10,20) 分别对a,b赋值 a=10, b=20
    
    var a,b = (10,20)则 是a=(10,20) b=(10,20)
    

      

    2 List

    List是不可变的,与Java中String类似,操作List返回的是新的List对象.

    val l = List(1,2,3,4,5) List元素类型一致

      

     3 Map Set

    (1) 不可变

    var jetSet = Set("Boeing", "Airbus")
    --[jetSet: scala.collection.mutable.Set[String] = Set(Airbus, Boeing)] jetSet += "Lear"
    --[res8: scala.collection.mutable.Set[String] = Set(Airbus, Boeing, Lear)] println(jetSet.contains("Lear"))

    第一句 var jetSet = Set("Boeing", "Airbus") 生成一个不可变的HashSet,第二句jetSet += "Lear"则是生成一个新的HashSet,并赋值给可变var变量jetSet。

    (2)可变

    import scala.collection.mutable.Set
    val movieSet = Set("Hitch", "Poltergeist")
    movieSet += "Shrek"
    println(movieSet)
    

      

    4 Tuple

    另一种有用的容器对象是元组:tuple。与列表一样,元组也是不可变的,但与列表不同, 元组可以包含不同类型的元素。而列表应该是 List[Int]或 List[String]的样子,元组可 以同时拥有 Int 和 String。元组很有用,比方说,如果你需要在方法里返回多个对象。Java 里你将经常创建一个 JavaBean 样子的类去装多个返回值,Scala 里你可以简单地返回一 个元组。而且这么做的确简单:实例化一个装有一些对象的新元组,只要把这些对象放在 括号里,并用逗号分隔即可。一旦你已经实例化了一个元组,你可以用点号,下划线和一 个基于 1 的元素索引访问它。

      

    val pair = (99, "Luftballons")
    println(pair._1)
    println(pair._2)

     5 Application

    scala 提供了一个特质,scala.Application,可以节省你一些手指的输入工作。尽管我们 还没有完全提供给你去搞明白它如何工作的所有需要知道的东西,不过我们还是认为你可 能想要知道它。 

    import ChecksumAccumulator.calculate
    object FallWinterSpringSummer extends Application {
      for (season <- List("fall", "winter", "spring"))
        println(season +": "+ calculate(season))
    }
    

     6 match

    Scala 的匹配表达式允许你在许多可选项:alternative 中做选择,就好象其它语言中的 switch 语句。通常说来 match 表达式可以让你使用任意的模式:pattern 做选择,第十五章会介绍。通 用的模式可以稍等再说。目前,只要考虑使用 match 在若干可选项中做选择 

    val firstArg = if (args.length > 0) args(0) else ""
    firstArg match {
      case "salt" => println("pepper")
      case "chips" => println("salsa")
      case "eggs" => println("bacon")
      case _ => println("huh?")
    }
    

    与 Java 的 switch 语句比,匹配表达式还有一些重要的差别。其中之一是任何种类的常量,或其 他什么东西,都能用作 Scala 里的 case,而不只是 Java 的 case 语句里面的整数类型和枚举常量。 在这个例子里,可选项是字串。另一个区别是在每个可选项的最后并没有 break。取而代之,break 是隐含的,不会有从一个可选项转到另一个里面去的情况。这通常把代码变短了,并且避免了一 些错误的根源,因为程序员不再因为疏忽在选项里转来转去。

    然而,与 Java 的 switch 相比最显著的差别,或许是 match 表达式也能产生值。在前一个例子里, match 表达式的每个可选项打印输出一个值。只生成值而不是打印也可以一样做到,展示在代码 7.15 中。match 表达式产生的值储存在 friend 变量里。这除了能让代码变得更短之外(至少减 少了几个指令),还解开了两个不相干的关注点:首先选择食物名,其次打印它。 

    val firstArg = if (!args.isEmpty) args(0) else ""
    val friend =
    //有副作用的 match 表达式
    firstArg match {
      case "salt" => "pepper"
      case "chips" => "salsa"
      case "eggs" => "bacon"
      case _ => "huh?"
    }
    println(friend)
    

      

  • 相关阅读:
    QQ
    本周最新文献速递20220410
    linux: x86_64condalinuxgnugcc: No such file or directory报错
    本周最新文献速递20220423
    R语言:group_by, summarise, arrange, slice
    plink: 计算多个SNP集的连锁不平衡(ld)
    perl: 安装 Math::GSL::SF 模块
    写出可复用代码的基本思想与实践
    理解设计模式之“道”
    如丝般顺滑:DDD再实践之类目树管理
  • 原文地址:https://www.cnblogs.com/yxzfscg/p/4907282.html
Copyright © 2020-2023  润新知