摘要: 这个案例很好地解释了Scala中抽象类型的应用。我们的任务是设计一个Currency类。一个典型的Currency实例可以用来代表以美元、欧元、日元或其他货币表示的金额。它应该支持对货币金额的计算。例如,应该能将相同货币额度的两笔金额相加,或者可以用表示利率的因子对某笔货币金额做乘法。同时添加两个改 阅读全文
posted @ 2021-01-19 21:40 地中有山 阅读(168) 评论(0) 推荐(0) 编辑
摘要: ①在函数作为参数传递时,入参逆变,返回值协变,Function1[-S, +T]。并不是说函数f的入参类型为A,可以传入其父类B,相反只能传入A及其子类。 ②下面的例子中方法printBookList参数为一个函数info,函数info的入参为子类Book。而运行时传入的函数getTile入参为父类 阅读全文
posted @ 2021-01-07 22:15 地中有山 阅读(113) 评论(0) 推荐(0) 编辑
摘要: //归并排序 def msort[T](less: (T, T) => Boolean) (xs: List[T]): List[T] = { //定义merge方法。对于两个已经有序的集合进行merge,结果也有序。 def merge(xs: List[T], ys: List[T]): Lis 阅读全文
posted @ 2020-12-20 21:22 地中有山 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 利用List的方法,代码极简,无需记忆下标移动。 ①方法insert将元素x插入到xs,使左边的元素都比x小。 ②insert(xs.head, isort(xs.tail)),可以理解为将待排序的List的第一个元素插入到其中①中所说的位置,参数isort(xs.tail)表示此待插入的集合已经有 阅读全文
posted @ 2020-12-11 21:59 地中有山 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 定义一个抽象的IntQueue类 abstract class IntQueue { def get(): Int def put(x: Int) } IntQueue的基本实现BasicIntQueue class BasicIntQueue extends IntQueue { private 阅读全文
posted @ 2020-12-06 11:40 地中有山 阅读(81) 评论(0) 推荐(0) 编辑
摘要: Ordered特质为你定义了<、>、<=和>=这些方法都是基于你提供的compare来实现的。因此,Ordered特质允许你只实现一个compare方法来增强某个类,让它拥有完整的比较操作。 object Rational{ def main(args: Array[String]): Unit = 阅读全文
posted @ 2020-12-06 10:40 地中有山 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 1.Element类和伴生对象 import Element.elem abstract class Element { def contents: Array[String] def height: Int = contents.length def width: Int = if (height 阅读全文
posted @ 2020-12-03 19:35 地中有山 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 在下面的代码中,类ArrayElement的主构造器接收一个参数,并将参数的值赋值给字段contents。 class ArrayElement(conts: Array[String]) { val contents: Array[String] = conts } 这样的代码存在着不必要的重复, 阅读全文
posted @ 2020-12-03 19:31 地中有山 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 方法filesMatching接收一个函数作为参数,这种高阶函数,可以简化很多代码。 _.endsWith(query)中有一个自由变量query,形成了闭包。 object Test9$1 { private def filesHere = new File(".").listFiles() de 阅读全文
posted @ 2020-11-29 14:26 地中有山 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 1.重复参数 要表示这样一个重复参数,需要在参数的类型之后加上一个星号(*)。 def main(args: Array[String]): Unit = { echo("hello", "world!") } def echo(args: String*) = { for (arg <- args 阅读全文
posted @ 2020-11-29 13:47 地中有山 阅读(116) 评论(0) 推荐(0) 编辑