文章目录
一、异常处理
object excepitonUse {
def main(args: Array[String]): Unit = {
try {
throw new IOException("throw a user define exception!!!")
} catch {
case e1: IOException => printf("found io exception...")
case e2: IllegalArgumentException => {
printf("do something when illegal happened.")
}
} finally {
printf("finally ......")
}
}
}
二、(多行字符串+
stripMargin)设置易读文本代码
1. stripMargin
直译是去掉边缘,意思就是把''' '''
多行字符串对象中每行的左边的隐式符号去掉,使其能够左对齐。
{1} 本来直接用""" """
即可,但这样有个坏处就是无法控制每行的开始位置,编译器会把代码中每行前面的隐式符号都给解析了。比如:
val s1 ="""This is
my first time
to learn Scala"""
println(s1)
//输出:
This is
my first time
to learn Scala
这个结果不是我们想要的,我们想要的是所有行左对齐。==》stripMargin
{2} 是一种在scala中格式化字符串的方式,类似于java的String.format,但功能更强大。可以用一个指定符号来标识每行的开始位置
。
- 可以格式化多行文本,更加整洁,指定标识符用来标识一行的一开始位置,输出时一行一行的输出,不用在后面拼 \n
- 可以指定分隔符,比如用#代替|,默认是
|
- 可以指定分隔符,比如用#代替|,默认是
- 也可以在里面拼接变量,只要在开头 “”"前面加
f
或s
即可。 - 可以不用将字符串中的引号等特殊字符转义,默认""" “”" 之间的都是字符串。
2. usage
{1} 替换行起始标识符
只能用单引号,stripMargin(’#’),而不能使用stripMargin("#"),这个会出现Cannot resolve reference stripMargin with such signature;
{2} 也可以不设置多行
多行其实在每个换行的字符串之间生成\n的换行符,可以将替换掉,eg.
val s3 ="""This is
#my first time
#to learn Scala""".stripMargin('#').replaceAll("\r\n", " ")
println(s3)
//输出变成了一行
This is my first time to learn Scala
3. example
val sql =f"""
| SELECT *,aaa AS $date%03d FROM $tableName
| WHERE ETL_DATE >= $startDate AND ETL_DATE <= $endDate
| """.stripMargin
三、match case == switch
https://blog.csdn.net/u010454030/article/details/53790751
最后放个case_兜底,如果没有任何1个匹配的会报错。
case _=>
三、偏函数,不带match的case
三、Option
定义变量时,左边必须显式声明为val test: Option[String] = None,否则会把test推断为None类型
二、bug
1.scala.MatchError: result (of class java.lang.String)
冒号后面的是要进行匹配的变量的值。
这个错是match时左边值在右边没有任何匹配时报的错。==》match时在最后设个case _
、scala-to、until、Range
这3个时间长不用就容易搞混
to是包头包尾
until是包头不包尾
Range是他们的底层实现。可以设置step,默认是等价于until的。step不能为0