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)

  

scala学习笔记(1):基本语法与容器的更多相关文章

  1. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  2. Scala学习笔记:重要语法特性

    1.变量声明 Scala 有两种变量, val 和 var  val的值声明后不可变,var可变 val msg: String = "Hello yet again, world!&quo ...

  3. Scala语言笔记 - 第三篇(容器方法篇)

    Scala语言笔记 - 第三篇(容器方法篇) 目录 Scala语言笔记 - 第三篇(容器方法篇) map和flapMap方法: ​ 最近研究了下scala语言,这个语言最强大的就是它强大的函数式编程( ...

  4. python3.4学习笔记(一) 基本语法 python3不向下兼容,有些语法跟python2.x不一样

    python3.4学习笔记(一) 基本语法 python3不向下兼容,有些语法跟python2.x不一样,IDLE shell编辑器,快捷键:ALT+p,上一个历史输入内容,ALT+n 下一个历史输入 ...

  5. ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现

    ASP.NET MVC 学习笔记-2.Razor语法   1.         表达式 表达式必须跟在“@”符号之后, 2.         代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...

  6. Scala学习笔记及与Java不同之处总结-从Java开发者角度

    Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...

  7. Java学习笔记之---基础语法

    Java学习笔记之---基础语法 一. Java中的命名规范 (一)包名 由多个单词组成时,所有字母小写(例如:onetwo) (二)类名和接口 由多个单词组成时,所有单词首字母大写(例如:OneTw ...

  8. Docker学习笔记之--.Net Core应用容器通过网桥连接Redis容器(环境:centos7)

    上节演示通过应用容器连接sql server容器,连接:Docker学习笔记之--.Net Core项目容器连接mssql容器(环境:centos7) 本节演示安装 redis容器,通过网桥连接 先决 ...

  9. CUBRID学习笔记 41 sql语法之select

    cubrid的中sql查询语法 SELECT [ ] [{TO | INTO} ][FROM ] [WHERE ][GROUP BY {col_name | expr} [ASC | DESC], . ...

  10. Scala学习笔记之:tuple、array、Map

    [TOC] 本文<快学Scala>的笔记 tuple学习笔记 tuple的定义 对偶是元组(tuple)的最简单形态--元组是不同类型的值的聚集. 元组的值是通过将单个值包含在圆括号中构成 ...

随机推荐

  1. GCD初步认识

    //(1)用异步函数往并发队列中添加任务, //总结:同时开启三个子线程 - (void)test1 { //1.获得全局的并发队列 dispatch_queue_t queue = dispatch ...

  2. POJ 1488

    #include <iostream> #include <string> using namespace std; int main() { string s; int i; ...

  3. 消除ComponentOne(C1StudioNet_2013v2) 的注册提示

     以后大家如果遇到还有提示,在License文件里添加:C1.Win.C1Command.C1OutBar, C1.Win.C1Command.4, Version=4.0.20132.19568,  ...

  4. Linux网络编程7——使用TCP实现双方聊天

    思路 主线程负责发送消息,另一线程负责接收消息.服务端和客户端均是如此. 注意 当A方close掉用于通信的socket端口后,该端口是不会立即关闭的.因为此时可能B方的信息还没send完.因此,此时 ...

  5. hdu 1531(差分约束)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1531 差分约束的题之前也碰到过,刚好最近正在进行图论专题的训练,就拿来做一做. ①:对于差分不等式,a ...

  6. linux下对普通用户设置文件访问控命令之setfacl

    命令名 setfacl  -设置文件访问控制列表 常用用法:setfacl [-bkRd] [{-m|-x} acl参数] 目标文件名 命令的常用参数 -m 设置后续的acl参数给文件使用(常用). ...

  7. http://blog.csdn.net/wxwzy738/article/details/16968767

    http://blog.csdn.net/wxwzy738/article/details/16968767

  8. redis资料汇总

    redis资源比较零散,引用nosqlfan上的文章,方便大家需要时翻阅.大家看完所有的,如果整理出文章的,麻烦知会一下,方便学习. 1.Redis是什么? 十五分钟介绍 Redis数据结构 Redi ...

  9. VS 解决方案目录结构设置

    涉及到的配置: 项目编译时使用的中间目录: 项目链接的输出目录: 项目编译结束后,拷贝生成的 dll 和 lib 到指定目录: 项目编译结束后,拷贝需要的 dll 到输出目录: 设置项目的工作目录: ...

  10. Android 【问题汇总】列表数组越界的问题

    遇到了一个诡异的问题,ListView发生数组越界(偶尔会),程序崩溃. 错误信息如下: W/dalvikvm( ): threadid=: thread exiting with uncaught ...