继续学习:

https://segmentfault.com/a/1190000003068853#articleHeader2

https://docs.scala-lang.org/tour/mixin-class-composition.html

基础知识

val 和 var : 一个是值,不可变;一个是变量,可变。

val 和 def 定义函数: val  只执行一次;def 每次执行。

call by name 和 call by value:by name 延迟加载,整个函数传入,需要时调用;by value 即通常调用

纯函数:输入输出数据流全是显式(Explicit)的。 好处: 方便单元测试

元组(Tuple)的好处:一次给多个变量赋值,函数返回多个值,通过模式匹配来增加可读性

match和java和switch很像,但有区别

  • match是表达式,会返回值
  • match不需要”break”
  • 如果没有任何符合要求的case,match会抛异常,因为是表达式
  • match可以匹配任何东西,switch只能匹配数字或字符串常量

Option

Option用于区分None和Some,把空指针扼杀在编译阶段。

val a: Option[String] = Some("1024")
val b: Option[String] = None
a.map(_.toInt)
//res0: Option[Int] = Some(1024)
b.map(_.toInt)
//res1: Option[Int] = None,不会甩exception
a.filter(_ == "2048")
//res2: Option[String] = None
b.filter(_ == "2048")
//res3: Option[String] = None
a.getOrElse("2048")
//res4: String = 1024
b.getOrElse("2048")
//res5: String = 2048

Trait

Trait类似于Java 8 中的Interface。定义常量和方法,并可以用作多继承。

官网上用一个例子来演示:AbsIterator作为抽象类,只定义抽象方法hasNext, next 还有类型T,对应Java中的接口; StringIterator实现方法,用于迭代获取string中每个字符,对应Java中的具体类; RichIterator不实现方法,自己定义一个foreach, 允许外部传入方法,应用于每一次迭代获取的T,类似于Java中抽象类。

然后定义

StringRichIterator extends StringIterator with RichIterator

这相当于Java中做了两次extends,而多重继承是Java中不允许的。所以scala做到了Java做不到的抽象。

最新文章

  1. 曝光最新WIN10系统32位,64位系统ghost版
  2. .NetDOM操作--un
  3. cts 测试环境安装 ubuntu
  4. SQL IF UPDATE(Number) 在触发器[Trigger]中的用法
  5. FFMPEG-数据结构解释(AVCodecContext,AVStream,AVFormatContext)
  6. 使用for循环运算
  7. 使用VUE模仿BOSS直聘APP
  8. Java经典编程题50道之四十四
  9. Java中常见的Exception种类
  10. 项目升级-oracle改版sql server问题点汇总
  11. Java中String直接赋字符串和new String的区别(面试常考)
  12. Practice| 流程控制
  13. JS运算符问题
  14. requests.get() 的 headers 参数
  15. 基于SSH实现员工管理系统之框架整合篇
  16. 程序打jar包
  17. 模块移除 命令rmmod 的实现
  18. Oracle_高级功能(8) 事务和锁
  19. 剑指offer十四之链表中倒数第k个结点
  20. JS中String与Array的一些常用方法

热门文章

  1. tcp注意点
  2. erlang 游戏服务器开发
  3. 【t008】钱币变换问题
  4. cocos2d-x之道~制作第一款文字游戏(二)
  5. 设置非ARC
  6. radio实现第一次点击选中第二次点击取消
  7. BZOJ 2818 Gcd 线性欧拉筛(Eratosthenes银幕)
  8. 还是Qt 通过stylesheet或者palette设置背景色的问题
  9. AndroidStudio一步步教你修改项目包名(最详细,最易懂)
  10. 读取xml格式的字符串和上下文中的xml数据