摘要: 模式匹配是一个检查值是否属于某个模式的机制。成功的匹配可以将一个值分解成多个组成部分。它相当于java中的switch的一个强化版本,并且可以代替if/else的很多场景。 语法 一个匹配表达式有一个值,然后接一个match关键字,最后接一个case 短语 import scala.util.Ran 阅读全文
posted @ 2020-10-28 11:48 周周周文阳 阅读(92) 评论(0) 推荐(0) 编辑
摘要: Case 类和一般的类类似,但是有些细小的区别,后面会讲。case 类对不可变数据建模非常友好。在后面的介绍中,我们将会在模式匹配中展示其优越性 定义一个Case类 一个最小的case类需要关键字 case class,一个标志符和一个参数列表(参数列表可以为空) case class Book(i 阅读全文
posted @ 2020-10-28 10:54 周周周文阳 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 方法可以有多个形参列表 例子 这里有个例子,在Scala集合Api中,特性Iterable 定义如下: trait Iterable[A] { ... def foldLeft[B](z: B)(op: (B, A) => B): B ... } foldLeft 将两个参数的函数 op 应用于一个 阅读全文
posted @ 2020-10-27 17:57 周周周文阳 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 在Scala中可以在方法中嵌套定义方法。下面的例子展示了 factorial 方法用于计算给定数字的阶乘 def factorial(x: Int): Int = { def fact(x: Int, accumulator: Int): Int = { if (x <= 1) accumulato 阅读全文
posted @ 2020-10-27 17:16 周周周文阳 阅读(72) 评论(0) 推荐(0) 编辑
摘要: 高阶函数是将其他函数作为形参,或者以函数作为返回结果。因为在Scala中,函数是一等公民。这个术语可能听起来有点乱,但实际上我们把 以函数作为形参或以函数作为返回结果的函数和方法统称为高阶函数。 在一个纯粹的面向对象编程中,隐藏可能会暴露对象内部状态的参数是一个很好的解决方案,泄漏内部状态可能会破坏 阅读全文
posted @ 2020-10-27 13:20 周周周文阳 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 混入是特性常用的手段用来构建一个类 abstract class A { val message: String } class B extends A { val message = "I'm an instance of class B" } trait C extends A { def lo 阅读全文
posted @ 2020-10-26 17:35 周周周文阳 阅读(72) 评论(0) 推荐(0) 编辑
摘要: 在Scala中,元组是一个包含了固定数量的元素的值,且每个元素都有自己的类型。元组是不可变的。 元组特别适用于一个方法返回多个值的场景。 一个二元元组可以按如下方式创建: val ingredient = ("Sugar" , 25) 这个元组包含了一个 String 类型的元素和一个 Int 类型 阅读全文
posted @ 2020-10-23 10:17 周周周文阳 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 特性用于类之间的接口和属性共享。它们跟java8中的接口有些类似【注:这里官方说的很准确,类似于java8的接口,而不是java7及之前的接口。因为trait同时可以声明抽象方法,也可以实现抽象方法。相当于是java接口的default的一个推广使用。】。类和伴生对象可以继承特性,但是特性不能被实例 阅读全文
posted @ 2020-10-23 10:00 周周周文阳 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 当我们调用方法时,你可以用形参名标记实参,如下 def printName(first: String, last: String): Unit = { println(first + " " + last) } printName("John", "Smith") // Prints "John 阅读全文
posted @ 2020-10-22 13:35 周周周文阳 阅读(66) 评论(0) 推荐(0) 编辑
摘要: Scala提供了参数默认值的功能,该默认值可以用于调用那些被省略的参数。 def log(message: String, level: String = "INFO") = println(s"$level: $message") log("System starting") // prints 阅读全文
posted @ 2020-10-22 13:28 周周周文阳 阅读(99) 评论(0) 推荐(0) 编辑