scala-使用-异常、多行字符串、模式匹配、偏函数、Option

12 篇文章 0 订阅

一、异常处理

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,但功能更强大。可以用一个指定符号来标识每行的开始位置

  1. 可以格式化多行文本,更加整洁,指定标识符用来标识一行的一开始位置,输出时一行一行的输出,不用在后面拼 \n
    1. 可以指定分隔符,比如用#代替|,默认是|
  2. 也可以在里面拼接变量,只要在开头 “”"前面加fs即可。
  3. 可以不用将字符串中的引号等特殊字符转义,默认""" “”" 之间的都是字符串。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值