package com.company
/**
* Created by Larry on 2014/7/21.
* Scala编程 第六章学习
*/
object Rational {
/*n,d类参数,Scala编译器收集这2个类参数并创造出带同样的
两个参数的主构造器*/
class Rational(n: Int,d: Int) {
/*先决条件*/
require(d != 0)
/*私有字段*/
private val g = gcd(n.abs, d.abs)
/*通过下面两句,Scala编译器才会产生包含2个Int类型
字段(分别是numer和denom)的类*/
val numer = n / g
val denom = d / g
/*辅助构造器*/
def this(n: Int) = this(n,1)
/*Scala编译器将把类内部的任何既不是字段也不是方法定义的代码
* 编译至主构造器中*/
override def toString = numer + "/" + denom //重写toString方法
/*有理数相加 定义方法*/
def add (that: Rational): Rational =
new Rational(
numer * that.denom + that.numer * denom,
denom * that.denom
)
/*有理数相加 定义操作符*/
def + (that: Rational): Rational =
new Rational(
numer * that.denom + that.numer * denom,
denom * that.denom
)
/*有理数相加 方法重载*/
def + (i: Int): Rational =
new Rational(numer + i * denom, denom)
/*有理数相建 定义操作符*/
def - (that: Rational): Rational =
new Rational(
numer * that.denom - that.numer * denom,
denom * that.denom
)
/*有理数相减 方法重载*/
def - (i: Int): Rational =
new Rational(numer - i * denom, denom)
/*有理数想乘 定义操作符*/
def * (that: Rational): Rational =
new Rational(
numer * that.numer,
denom * that.denom
)
/*有理数相乘 方法重载*/
def * (i: Int): Rational =
new Rational(numer * i , denom)
/*有理数相除 定义操作符*/
def / (that: Rational): Rational =
new Rational(
numer * that.denom, denom * that.numer
)
/*有理数相除 方法重载*/
def / (i: Int): Rational =
new Rational(numer , denom * i)
/*私有方法,求2个数最大公约数*/
private def gcd(a: Int, b: Int): Int =
if (b == 0) a else gcd(b, a % b)
}
def main (args: Array[String] ) {
var x = new Rational(1,2)
var y = new Rational(1,3)
var z = new Rational(3)
var m = new Rational(2)
var n = new Rational(2,3)
println((x - y) * x / n * z / m)
/*隐式转换*/
implicit def intToRational(x: Int) = new Rational(x)
var k = new Rational(1,5)
println(2 * k)
/*println(x.add(new Rational(1,3)))
println(x + new Rational(1,3))
println(x .+(new Rational(1,3)) )
println(x * new Rational(1,3))
println(x.numer)
println(x.denom)
println(new Rational(8))
println(new Rational(22,66))*/
}
}
分享到:
相关推荐
### Scala学习笔记(全) #### 一、Scala概述与特点 Scala是一种多范式的编程语言,旨在集成面向对象编程和函数式编程的各种特性。它运行于Java平台(Java虚拟机JVM),并且能够完全兼容所有的Java程序。这使得Scala...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性,使得它在处理并发、大数据分析以及构建高性能系统时表现卓越。在"Scala-学习资料-mht.rar"这个压缩包中,包含了关于Scala的学习资料,格式为...
在"scala学习笔记整理"中,我们可以深入探讨以下关键知识点: 1. **基础语法**:Scala的基础语法与Java有相似之处,但也有很多独特的特点。例如,它支持变量的不可变性(immutability),使用`val`声明常量,`var`...
### Scala学习笔记关键知识点 ...以上内容涵盖了Scala学习笔记中的关键知识点,从并发编程到函数式编程的核心概念,再到Scala语言本身的一些特殊规则和特点,这些都是学习Scala时需要掌握的基础知识。
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性,被广泛应用于大数据处理、分布式计算和高性能应用开发。本压缩包包含五份PDF文档,旨在帮助初学者快速入门并逐步进阶Scala编程。 第一部分...
Scala是一种强大的、现代的编程语言,它融合了面向对象编程(OOP)和函数式编程(FP)的特性,为开发者提供了丰富的表达能力和高效的代码执行环境。作为Java平台上的一个成员,Scala程序可以在Java虚拟机(JVM)上...
Scala学习资源Scala编程语言抓住了很多开发者的眼球。如果你粗略浏览Scala的网站,你会觉得Scala是一种纯粹的面向对象编程语言,而又无缝地结合了命令式编程和函数式编程风格。Christopher Diggins认为: 不太久...
Scala是一种多范式编程语言,它结合了面向对象编程与函数式编程的特点。Scala语言的设计目标之一就是尽可能地提高代码的可读性和简洁性,同时保持高性能。由于Scala运行在Java虚拟机(JVM)之上,因此它可以无缝地与...
Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。 Scala 运行在Java虚拟机上,并兼容现有的Java程序。 Scala 源代码被编译成Java字节码,所以它可以运行于...
本教程“scala-learn:scala学习笔记”旨在帮助初学者深入理解Scala的基础知识,同时也为有经验的程序员提供了一个复习和提升的平台。 1. **基础语法与数据类型** Scala的基础语法简洁而强大,包括变量声明(val和...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性,被广泛应用于大数据处理、分布式计算和Web开发等领域。Spark是基于Scala构建的大数据处理框架,其高性能和易用性使得Scala在大数据领域备受...
Scala 是一门基于 Java 虚拟机(JVM)为目标运行环境,并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言。Scala 是纯粹的面向对象语言,每个值都是对象,每个操作都是方法调用。 Scala 语言特点: ...
Scala是一种强大的、面向对象的编程语言,它集成了函数式编程的特点,被广泛应用于大数据处理、分布式计算和Web开发等领域。Cats是Scala生态系统中的一个核心库,专注于提供类型类和Monad等抽象,用于构建类型安全、...
Scala 语言的特点包括:静态类型、面向对象、函数式编程、类型推断等。Scala 语言的静态类型可以在编译期检查类型错误,避免了运行时的类型错误。Scala 语言的面向对象特性使得它可以与 Java 语言无缝集成。Scala ...
Scala 是一种多范式编程语言,支持面向对象编程、函数式编程和逻辑编程。Scala 的设计目标是提供一种expressive 且简洁的语言,使开发者可以快速开发高质量的软件。下面是 Scala 初学者入门课程笔记的总结: 环境...
Scala是一种多范式编程语言,融合了面向对象和函数式编程的特性,它被广泛用于构建大规模、高性能的应用程序。在测试方面,Scala提供了强大的工具和框架,使得开发者能够编写高效、可靠的测试代码。 书中的内容可能...
Scala是一种静态类型的编程语言,它融合了面向对象和函数式编程的概念,设计目标是提供一种简洁、高性能的编程体验。以下是对标题和描述中涉及的知识点的详细说明: 1. **学习Scala的原因**: Scala的出现主要是...
Scala是一种多范式的编程语言,它融合了面向对象和函数式编程的概念,旨在提供一种简洁、类型安全且高性能的编程环境。本教程基于韩顺平老师的教学内容,旨在帮助初学者掌握Scala的基础语法和核心特性。 一、基础...
**标题与描述解析** ...综上所述,这个压缩包文件可能包含了学习者在Coursera上完成Scala函数式编程课程时积累的所有材料,包括代码示例、笔记、项目文件等,这些都是进一步学习和复习函数式编程概念的重要资源。