Scala简明教程(2)

Scala简明教程(2)

包Package

import 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")
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值