Scala编程第20章 Abstract Members 例子分析。
源程序:
/**
* 《Programming In Scala》第20章 Abstract Members 例子
*/
package org.stairwaybook.currencies
//货币区域基类
abstract class CurrencyZone {
//货币类型,虚类型,用于方法的参数化,由于上界为AbstractCurrency所以子类型中定义
//的实类型必须是AbstractCurrency的子类
type Currency <: AbstractCurrency
//工厂方法,虚方法,创建货币对象
def make(x: Long): Currency
//货币类型基类
abstract class AbstractCurrency {
//数量
val amount: Long
//货币名称
def designation: String
//加法操作
def + (that: Currency): Currency =
make(this.amount + that.amount)
//乘法操作
def * (x: Double): Currency =
make((this.amount * x).toLong)
//减法操作
def - (that: Currency): Currency =
make(this.amount - that.amount)
//除法操作
def / (that: Double) =
make((this.amount / that).toLong)
//除法操作,(货币对象之间除)
def / (that: Currency) =
this.amount.toDouble / that.amount
//汇率转换操作
def from(other: CurrencyZone#AbstractCurrency): Currency =
//从Converter.exchangeRate中取得汇率然后计算转换结果
make(Math.round(
other.amount.toDouble * Converter.exchangeRate
(other.designation)(this.designation)))
//求以10为底的对数
private def decimals(n: Long): Int =
if (n == 1) 0 else 1 + decimals(n / 10)
//货币的文本描述
override def toString =
//用货币的单位值来计算小数和整数部分
((amount.toDouble / CurrencyUnit.amount.toDouble)
formatted ("%."+ decimals(CurrencyUnit.amount) +"f")
+" "+ designation)
}
//货币单位值
val CurrencyUnit: Currency
}
//汇率转换单例对象
object Converter {
//货币汇率对照表
var exchangeRate = Map(
"USD" -> Map("USD" -> 1.0 , "EUR" -> 0.7596,
"JPY" -> 1.211 , "CHF" -> 1.223),
"EUR" -> Map("USD" -> 1.316 , "EUR" -> 1.0 ,
"JPY" -> 1.594 , "CHF" -> 1.623),
"JPY" -> Map("USD" -> 0.8257, "EUR" -> 0.6272,
"JPY" -> 1.0 , "CHF" -> 1.018),
"CHF" -> Map("USD" -> 0.8108, "EUR" -> 0.6160,
"JPY" -> 0.982 , "CHF" -> 1.0 )
)
}
//美元区域单例对象
object US extends CurrencyZone {
//美元基类
abstract class Dollar extends AbstractCurrency {
def designation = "USD"
}
//货币类型,父类中虚类型的实例化
type Currency = Dollar
//创建美元对象,cents为美分数
def make(cents: Long) = new Dollar {
val amount = cents
}
//1美分的值
val Cent = make(1)
//1美元的值
val Dollar = make(100)
//单位值为美元
val CurrencyUnit = Dollar
}
//欧元区域单例对象
object Europe extends CurrencyZone {
//欧元基类
abstract class Euro extends AbstractCurrency {
def designation = "EUR"
}
//货币类型
type Currency = Euro
//创建欧元对象,cents为欧分数
def make(cents: Long) = new Euro {
val amount = cents
}
//1欧分的值
val Cent = make(1)
//1欧元的值
val Euro = make(100)
//单位值为欧元
val CurrencyUnit = Euro
}
//日元区域单例对象
object Japan extends CurrencyZone {
//日元基类
abstract class Yen extends AbstractCurrency {
def designation = "JPY"
}
//货币类型
type Currency = Yen
//创建日元对象,yen为日元数
def make(yen: Long) = new Yen {
val amount = yen
}
//1日元的值
val Yen = make(1)
//单位值为日元
val CurrencyUnit = Yen
}
//文件主单例对象,作为本文件的主执行程序
object App extends Application {
//将100美元换成日元
val yen : Japan.Currency = Japan.Yen from US.Dollar * 100
println(yen)
//将上述日元转换为欧元
val euro = Europe.Euro from yen
println(euro)
//将上述欧元转换回美元
val dollar = US.Dollar from euro
println(dollar)
//进行加法计算
val d2 = US.Dollar * 100 + dollar
println(d2)
}
执行结果:
12110 JPY
75.95 EUR
99.95 USD
199.95 USD
分享到:
相关推荐
Scala学习笔记,大全笔记
### Scala学习笔记(全) #### 一、Scala概述与特点 Scala是一种多范式的编程语言,旨在集成面向对象编程和函数式编程的各种特性。它运行于Java平台(Java虚拟机JVM),并且能够完全兼容所有的Java程序。这使得Scala...
在"scala学习笔记整理"中,我们可以深入探讨以下关键知识点: 1. **基础语法**:Scala的基础语法与Java有相似之处,但也有很多独特的特点。例如,它支持变量的不可变性(immutability),使用`val`声明常量,`var`...
scala编程 33章 中文pdf Scala编程实战 目录 第1章字符串. 11 第2章数值39 第3章控制结构.60 第4章类和属性.103 第5章方法147 第6章对象170 第7章包和导入.190 第8章特质200 第9章函数式编程214 第10 章集合242 第...
### Scala学习笔记关键知识点 ...以上内容涵盖了Scala学习笔记中的关键知识点,从并发编程到函数式编程的核心概念,再到Scala语言本身的一些特殊规则和特点,这些都是学习Scala时需要掌握的基础知识。
Scala编程是一种多范式、函数式和面向对象的编程语言,设计目的是为了提高开发者的生产力,同时保持代码的可维护性和高性能。它是由Martin Odersky在2003年设计并实现的,融合了Java虚拟机(JVM)的优势,并引入了...
Scala是一种静态类型的函数式编程语言,而Spark是一个分布式计算框架,尤其适合于大数据处理和分析。本教程将深入探讨这两者如何结合,实现高效的大数据分析、数据流处理以及机器学习任务。 首先,让我们来理解...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性,使得它在处理并发和大数据分析方面尤为出色。这个压缩包包含了三本关于Scala学习的重要资源,分别是《快学Scala》完整版书籍、《SCALA程序...
《Scala函数式编程》是针对希望学习FP并将它应用于日常编码中的程序员而写的,内容包括:函数式编程的概念;函数式编程相关的各种“为什么”和“怎么做”;如何编写多核程序;练习和检测。 从OOP到FP,思路的转化 ...
ScalaOverview.pdf ScalaTutorial.pdf ProgrammingInScala.pdf(这本是书) 博文链接:https://dogstar.iteye.com/blog/182673
[Scala学习笔记-中文资料] 从java角度看Scala
读书笔记:scala 编程代码实际例子
Scala是一种强大的、现代的编程语言,它融合了面向对象编程(OOP)和函数式编程(FP)的特性,为开发者提供了丰富的表达能力和高效的代码执行环境。作为Java平台上的一个成员,Scala程序可以在Java虚拟机(JVM)上...
读书笔记:Scala编程学习
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性,被广泛应用于大数据处理...通过深入学习和实践,你不仅可以掌握Scala语言,还能有效利用Scala在大数据分析和处理项目中发挥出Spark的强大性能。
《Scala语言核心编程》是尚硅谷教育机构韩顺平老师主讲的一门课程,主要针对Scala这门多范式编程语言进行深入讲解。Scala是一种静态类型的编程语言,它融合了面向对象和函数式编程的概念,设计目标是提供一种简洁、...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性,使得它在处理并发、大数据分析以及构建高性能系统时表现卓越。在"Scala-学习资料-mht.rar"这个压缩包中,包含了关于Scala的学习资料,格式为...