apply方法是Scala中十分常见的方法,你可以把这种用法当做是()操作符的重载形式。

像以上这样伴生对象的apply方法是Scala中构建对象的常用手法,不再需要使用new。

if 条件表达式的值就是跟在if或else之后的表达式的值,如果两者类型不同,选择各分支类型的公共超类型作为返回类型。

if(x>1) 1 相当于 if(x>1) 1 else ()

你可以把()当做是表示“无有用值”的占位符,将Unit当做Java的Void

如果你在写较长的语句,需要分行来写的话, 要确保第一行以一个不能用做语句结尾的符号结尾。通常来说一个比较好的选择是操作符:

"aa" + "bb"

+ "cc" //这样解析器会报错

"aa" + "bb" +

"cc" //这样才是正确的

Scala表达式用{}, 最后一个表达式的值就是块的值。

Scala循环while和for:

val a = for (i <- 1 to 10)  { i }

val b = for (i <- 1 until 10)  { i }

Scala break:

  1. import scala.util.control.Breaks._
  2.  
  3. object BreakDemo {
  4. def main(args: Array[String]): Unit = {
  5. breakable {
  6. for(i <- 1 to 10){
  7. break
  8. }
  9.  
  10. }
  11. }
  12. }

Scala for推导式,返回一个Vector集合

  1. // Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
  2. val a = for (i <- 1 to 10) yield { i }

Scala函数的带名参数

  1. def decorate(atr: String, left: String = "[", right: String = "]") = {
  2. left + atr +
  3. right
  4. }
  5.  
  6. decorate("Hello", right = ">>>]")

Scala变长参数

  1. def writeName(name: String*) = {
  2. for (n <- name) {
  3. println(n)
  4. }
  5. }
  6.  
  7. val se = Array("aa", "bb", "cc")
  8. writeName(se: _*)

当val被声明为lazy时,初始化被推迟,知道第一次取值的。

Scala异常

  1. package com.citi.Lscala
  2.  
  3. object FunDemo {
  4. def main(args: Array[String]): Unit = {
  5.  
  6. try {
  7. // Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
  8. val a = for (i <- 1 to 10) yield { i }
  9. println(a)
  10. println(decorate("Hello", ">>>]"))
  11. val b = -10
  12. println(checkValue(b).getClass())
  13. println(decorate("Hello", right = ">>>]"))
  14. println(1 to 5)
  15. val se = Array("aa", "bb", "cc")
  16. writeName(se: _*)
  17. } catch {
  18. case t: Throwable => t.printStackTrace()
  19. case _: Exception => println("Exception")
  20. } finally {
  21. println("do finally")
  22. }
  23.  
  24. }
  25.  
  26. def checkValue(x: Int) = {
  27. if(x>1) 1 else ()
  28. }
  29.  
  30. def decorate(atr: String, left: String = "[", right: String = "]") = {
  31. left + atr +
  32. right
  33. }
  34.  
  35. def writeName(name: String*) = {
  36. for (n <- name) {
  37. println(n)
  38. }
  39. }
  40.  
  41. }

快学Scala 第二课 (apply, if表达式,循环,函数的带名参数,可变长参数,异常)的更多相关文章

  1. 快学Scala 第二十二课 (apply和unapply)

    apply和unapply: apply方法经常用在伴生对象中,用来构造对象而不用显式地使用new. unapply是当做是伴生对象的apply方法的反向操作.apply方法接受构造参数,然后将他们变 ...

  2. 快学Scala 第二十一课 (初始化trait的抽象字段)

    初始化trait的抽象字段: trait Logged { println("Logged constructor") def log(msg: String){ println( ...

  3. 快学Scala 第二十课 (trait的构造顺序)

    trait的构造顺序: 首先调用超类构造器 特质构造器在超类构造器之后,类构造器之前执行 特质从左向右被构造 每个特质当中,父特质先被构造 如果多个特质共有一个父特质,而那个父特质已经被构造,则不会被 ...

  4. 快学Scala 第九课 (伴生对象和枚举)

    Scala没有静态方法和静态字段, 你可以用object这个语法结构来达到同样的目的. 对象的构造器只有在第一次被使用时才调用. 伴生对象apply方法: 类和它的伴生对象可以互相访问私有特性,他们必 ...

  5. 快学Scala 第一课 (变量,类型,操作符)

    Scala 用val定义常量,用var定义变量. 常量重新赋值就会报错. 变量没有问题. 注意:我们不需要给出值或者变量的类型,scala初始化表达式会自己推断出来.当然我们也可以指定类型. 多个值和 ...

  6. 快学Scala 第十九课 (trait的abstract override使用)

    trait的abstract override使用: 当我看到abstract override介绍的时候也是一脸懵逼,因为快学scala,只介绍了因为TimestampLogger中调用的super ...

  7. 快学Scala习题解答—第一章 基础

    1 简介 近期对Scala比较感兴趣,买了本<快学Scala>,感觉不错.比<Programming Scala:Tackle Multi-Core Complexity on th ...

  8. 《快学Scala》

    Robert Peng's Blog - https://mr-dai.github.io/ <快学Scala>Intro与第1章 - https://mr-dai.github.io/S ...

  9. 快学Scala 2

    控制结构和函数 1.在Scala中,几乎所有构造出来的语法结构都有值.这个特性是为了使得程序更加精简,也更易读. (1)if表达式有值 (2)块也有值——是它最后一个表达式的值 (3)Scala的fo ...

随机推荐

  1. BZOJ2038 小Z的袜子 莫队

    BZOJ2038 题意:q(5000)次询问,问在区间中随意取两个值,这两个值恰好相同的概率是多少?分数表示: 感觉自己复述的题意极度抽象,还是原题意有趣(逃: 思路:设在L到R这个区间中,x这个值得 ...

  2. Codeforces Round #486 (Div. 3)988E. Divisibility by 25技巧暴力||更暴力的分类

    传送门 题意:给定一个数,可以对其做交换相邻两个数字的操作.问最少要操作几步,使得可以被25整除. 思路:问题可以转化为,要做几次交换,使得末尾两个数为00或25,50,75: 自己一开始就是先for ...

  3. 51 nod 石子归并 + v2 + v3(区间dp,区间dp+平行四边形优化,GarsiaWachs算法)

    题意:就是求石子归并. 题解:当范围在100左右是可以之间简单的区间dp,如果范围在1000左右就要考虑用平行四边形优化. 就是多加一个p[i][j]表示在i到j内的取最优解的位置k,注意能使用平行四 ...

  4. 漫谈Spring Security 在Spring Boot 2.x endpoints中的应用(一)

    Spring Boot 2.x极大简化了默认的安全配置,并不是说有很多安全相关的配置,现在你只需要提供一个WebSecurityConfigurerAdapter继承类这样一个简单的操作,Spring ...

  5. buuctf 随便注 writeup

    1.0 打开页面 显然这个题的考点是注入,那我们来测一下 2.0 sql注入测试 1 2 输入 1' 后发现没有回显,改为 1' --+ 后,有回显,应该在这存在注入点 试一下 1' and 1=1 ...

  6. Mac环境IntelliJ IDEA配置JDK提示The selected directory is not a valid home for JDK

    笔者使用mac配置如下: 硬件环境:MacBook Pro 操作系统:MacOS Sierra 10.13.6 开发工具:IntelliJ IDEA 2016.x JDK版本:已有Open JDK 8 ...

  7. 干货| 外卖点餐系统(App及后台)

    简单总结一下,这个系统是一个外卖点餐系统,也就是仿美团饿了么,也是当时我的毕业设计,花费了我很多精力,主要包括了移动端App.服务端(中台)和商家的后台管理.答辩完后我就将移动端源码放到了GitHub ...

  8. ACM团队周赛题解(1)

    这次周赛题目拉了CF315和CF349两套题. 因为我代码模板较长,便只放出关键代码部分 #define ll long long #define MMT(s,a) memset(s, a, size ...

  9. 装系统 ---------- 了解 UEFI与Legacy、硬盘分区MBR和GPT

    UEFI:全称“统一的可扩展固件接口”(Unified Extensible Firmware Interface),一种详细描述类型接口的标准.这种接口用于操作系统自动从预启动的操作环境,加载到一种 ...

  10. vue2.0生成二维码图片并且下载图片到本地兼容写法

    vue生成二维码图片,这里使用的是qrcode.js 这个插件(亲测写法,兼容没有问题) 第一步,下载插件 需要注意,这里下载的是qrcodejs2 cnpm install --save qrcod ...