快学Scala 第二课 (apply, if表达式,循环,函数的带名参数,可变长参数,异常)
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表达式,循环,函数的带名参数,可变长参数,异常)的更多相关文章
- 快学Scala 第二十二课 (apply和unapply)
apply和unapply: apply方法经常用在伴生对象中,用来构造对象而不用显式地使用new. unapply是当做是伴生对象的apply方法的反向操作.apply方法接受构造参数,然后将他们变 ...
- 快学Scala 第二十一课 (初始化trait的抽象字段)
初始化trait的抽象字段: trait Logged { println("Logged constructor") def log(msg: String){ println( ...
- 快学Scala 第二十课 (trait的构造顺序)
trait的构造顺序: 首先调用超类构造器 特质构造器在超类构造器之后,类构造器之前执行 特质从左向右被构造 每个特质当中,父特质先被构造 如果多个特质共有一个父特质,而那个父特质已经被构造,则不会被 ...
- 快学Scala 第九课 (伴生对象和枚举)
Scala没有静态方法和静态字段, 你可以用object这个语法结构来达到同样的目的. 对象的构造器只有在第一次被使用时才调用. 伴生对象apply方法: 类和它的伴生对象可以互相访问私有特性,他们必 ...
- 快学Scala 第一课 (变量,类型,操作符)
Scala 用val定义常量,用var定义变量. 常量重新赋值就会报错. 变量没有问题. 注意:我们不需要给出值或者变量的类型,scala初始化表达式会自己推断出来.当然我们也可以指定类型. 多个值和 ...
- 快学Scala 第十九课 (trait的abstract override使用)
trait的abstract override使用: 当我看到abstract override介绍的时候也是一脸懵逼,因为快学scala,只介绍了因为TimestampLogger中调用的super ...
- 快学Scala习题解答—第一章 基础
1 简介 近期对Scala比较感兴趣,买了本<快学Scala>,感觉不错.比<Programming Scala:Tackle Multi-Core Complexity on th ...
- 《快学Scala》
Robert Peng's Blog - https://mr-dai.github.io/ <快学Scala>Intro与第1章 - https://mr-dai.github.io/S ...
- 快学Scala 2
控制结构和函数 1.在Scala中,几乎所有构造出来的语法结构都有值.这个特性是为了使得程序更加精简,也更易读. (1)if表达式有值 (2)块也有值——是它最后一个表达式的值 (3)Scala的fo ...
随机推荐
- PAT 天梯杯 L2-014 列车调度
火车站的列车调度铁轨的结构如下图所示. Figure 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道.每趟列车从入口可以选择任意一条轨道进入,最后从出口 ...
- java 面试题 1-10
1. Java 基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法, 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 1.一个".java&q ...
- 常用logback.xml配置详解
选择logback的理由 ==logback==与==log4j==的简单对比一下: 1.首先,对于同样的代码路径,==logback==使用起来更快. 2.==logback==原生实现了log4j ...
- 【Spring】AOP注解方式实现机制
一.概述 二.@EnableAspectJAutoProxy 注解分析 三.分析AnnotationAwareAspectJAutoProxyCreator 四.执行流程 1. registerBea ...
- 全栈开发博客系统(nodejs+vuejs+mongodb)
本篇文章将会介绍如何使用nodejs+vuejs构建个人博客. 主要分三部分内容: 环境准备 博客后端管理系统(admin) 后端服务(主要提供admin及web端接口) 博客前端展示(web) 环境 ...
- Spring Boot2 系列教程(四)理解Spring Boot 配置文件 application.properties
在 Spring Boot 中,配置文件有两种不同的格式,一个是 properties ,另一个是 yaml . 虽然 properties 文件比较常见,但是相对于 properties 而言,ya ...
- mysql5.7指定字符集
在这个配置下面加上下面这行就可以 [mysqld] character_set_server=utf8 重启后: mysql> show variables like 'char%';+---- ...
- Go语言标准库之log
无论是软件开发的调试阶段还是软件上线之后的运行阶段,日志一直都是非常重要的一个环节,我们也应该养成在程序中记录日志的好习惯. log Go语言内置的log包实现了简单的日志服务.本文介绍了标准库log ...
- Nacos配置服务原理
Nacos Client配置机制 spring加载远程配置 在了解NACOS客户端配置之前,我们先看看spring怎么样加载远程配置的.spring 提供了加载远程配置的扩展接口 PropertySo ...
- Winform中通过代码给PanelControl添加子控件并进行定位
场景 DevExpress的PanelControl常用进行窗体页面的布局. 一般是拖拽一个PannelControl,然后是再拖拽其他控件. 如果是由代码生成控件并控制布局的话,怎样实现. 关注公众 ...