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:

import scala.util.control.Breaks._

object BreakDemo {
def main(args: Array[String]): Unit = {
breakable {
for(i <- 1 to 10){
break
} }
}
}

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

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

Scala函数的带名参数

  def decorate(atr: String, left: String = "[", right: String = "]") = {
left + atr +
right
} decorate("Hello", right = ">>>]")

Scala变长参数

  def writeName(name: String*) = {
for (n <- name) {
println(n)
}
} val se = Array("aa", "bb", "cc")
writeName(se: _*)

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

Scala异常

package com.citi.Lscala

object FunDemo {
def main(args: Array[String]): Unit = { try {
// Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val a = for (i <- 1 to 10) yield { i }
println(a)
println(decorate("Hello", ">>>]"))
val b = -10
println(checkValue(b).getClass())
println(decorate("Hello", right = ">>>]"))
println(1 to 5)
val se = Array("aa", "bb", "cc")
writeName(se: _*)
} catch {
case t: Throwable => t.printStackTrace()
case _: Exception => println("Exception")
} finally {
println("do finally")
} } def checkValue(x: Int) = {
if(x>1) 1 else ()
} def decorate(atr: String, left: String = "[", right: String = "]") = {
left + atr +
right
} def writeName(name: String*) = {
for (n <- name) {
println(n)
}
} }

快学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. poj 1511 Invitation Cards(dijstra优化)

    题目链接:http://poj.org/problem?id=1511 题意:给出n个点和n条有向边,求所有点到源点1的来回最短路之和(保证每个点都可以往返源点1) 题目比较简单就是边和点的个数有点多 ...

  2. Java连载27-有返回值的方法注意点

    一.方法注意点 (1)方法的调用不一定再main方法中,可以在其他方法中进行调用,只要是程序执行到的位置,都可以去调用其他方法. (2)方法调用的时候,实参和形参要求个数对应相同,数据类型对应相同,方 ...

  3. java 面试题 1-10

    1. Java 基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法, 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 1.一个".java&q ...

  4. map + filter + reduce

    map 是对 集合 里面的元素一个接一个的进行某种运算,常常与lambda 结合使用   #求平方: items = [1, 2, 3, 4, 5] squared = list(map(lambda ...

  5. 使用 jupyter-notebook + python + matplotlib 进行数据可视化

    上次用 python 脚本中定期查询数据库,监视订单变化,将时间与处理完成订单的数量进行输入写入日志,虽然省掉了人为定时查看数据库并记录的操作,但是数据不进行分析只是数据,要让数据活起来! 为了方便看 ...

  6. Mysql 用户root密码重置

    Asterisk安装完成之后,接手新的Asterisk系统后不清楚Mysql的root账号密码. 重新重置mysql的root密码的方式 先查看mysql的版本号. 我的测试环境下的mysql版本为5 ...

  7. Sublime配置Python & sublime操作

    前言 前几天我发了一个配置C++的博客,今天再给大家掏一掏Python如何配置.但是主要是操作,文件并没有很多. 正文 文件地址:python 提取码:3gb7 先全部解压,sublime就按照上面说 ...

  8. 基于Python的多线程与多进程

    1.I/O密集型与计算密集型 多进程适用于I/O密集型 多进程适用于计算密集型 2.没有sleep(T)的多个死循环只能用多进程 3.模块介绍: 1)threading模块(_thread模块已淘汰) ...

  9. 玩转 Springboot 2 之热部署(DevTools)

    Devtools 介绍 SpringBoot 提供了热部署的功能,那啥是热部署累?SpringBoot官方是这样说的:只要类路径上的文件发生更改,就会自动重新启动应用程序.在IDE中工作时,这可能是一 ...

  10. Android实现广告页图片无限轮播

    一.概述 对于一个联网的Android应用, 首页广告无限轮播基本已经成为标配了. 那么它是怎么实现的呢? 有几种实现方式呢? 二.无限轮播的实现 1.最常规的手段是用 ViewPager来实现 2. ...