Scala简明教程(2)
2016-05-31 14:12
204 查看
Scala简明教程(2)
包Packageimport scala.collection._ //通配符导入,类似java中的.* import scala.collection.Vector import scala.collection.{Vector, Sequence} //导入多个 import scala.collection.{Vector => Vec28} //别名. import java.util.{Date => _, _} //除了Date,其它都导入 package pkg at start of file package pkg { ... }
一般语句后面可以省略 ;
数据结构
tuple类型
(1,2,3) var (x,y,z) = (1,2,3)
List类型
var xs = List(1,2,3) xs(2)
一些特殊的操作符
1 :: List(2,3) List(1, 2) ::: List(2, 3) List(1, 2) ++ Set(3, 4, 3)
range
1 to 5 same as 1 until 6 1 to 10 by 2
字符串
s前缀, 替换字符串中的变量或表达式
val name = "James" println(s"Hello, $name") // Hello, James println(s"1 + 1 = ${1 + 1}")
f前缀, printf风格的格式化
val height = 1.9d val name = "James" println(f"$name%s is $height%2.2f meters tall") // James is 1.90 meters tall
raw前缀, 原始字符,不转义
scala> raw"a\nb" res1: String = a\nb
r后缀, 正则表达式
scala> "a".r res1: scala.util.matching.Regex = a
自定义的字符串拦截器
implicit class JsonHelper(private val sc: StringContext) extends AnyVal { def json(args: Any*): JSONObject = ... } val x: JSONObject = json"{ a: $a }"
控制流程
if语句
if (check) happy else sad if (check) happy //下面一样 if (check) happy else ()
while语句
import scala.util.control.Breaks._ breakable { for (x <- xs) { if (Math.random < 0.1) break } } for (x <- xs if x%2 == 0) yield x*10 //与下面的等价 xs.filter(_%2 == 0).map(_*10) for ((x,y) <- xs zip ys) yield x*y //与下面的等价 (xs zip ys) map { case (x,y) => x*y } for (x <- xs; y <- ys) yield x*y //与下面的等价 xs flatMap {x => ys map {y => x*y}} for (x <- xs; y <- ys) { //双层嵌套,类似for {for {}} println("%d/%d = %.1f".format(x,y, x*y)) } for (i <- 1 to 5) { println(i) } for (i <- 1 until 5) { println(i) }
模式匹配
case class自动生成equals和toString,参数相同则==返回true
(xs zip ys) map { case (x,y) => x*y } val v42 = 42 Some(3) match { case Some(`v42`) => println("42") case _ => println("Not 42") } val UppercaseVal = 42 Some(3) match { case Some(UppercaseVal) => println("42") case _ => println("Not 42") }
相关文章推荐
- Java遍历HashMap并修改(remove)
- 《Linux及安全》实践3.2
- Android属性之build.prop生成过程分析
- 修改数据信息时,判断复选框的值是否被选中
- 01背包动态规划-java源码
- postgres服务并发测试
- XML解析之sax解析案例(二)使用sax解析把 xml文档封装成对象
- XML解析之sax解析案例(二)使用sax解析把 xml文档封装成对象
- caffe学习资源汇总(更新中)
- XML文件
- 机器学习之数学知识
- Java字符类型
- 循环日程表问题
- 将本地包添加到maven中央本地库中
- android.os.BinderProxy cannot be cast to cq.cake.servicetest.MyService错误
- PAT 1049. 数列的片段和(20)
- Python操作Excel之xlwt
- Enum
- 解决 bootstrap 在IE8下的兼容问题
- Step 1: 盲打第二天