Scala学习笔记——函数式对象
用创建一个函数式对象(类Rational)的过程来说明
类Rational是一种表示有理数(Rational number)的类
package com.scala.first /**
* Created by common on 17-4-3.
*/
object Rational {
def main(args: Array[String]) { var r1 = new Rational(1, 2)
var r2 = new Rational(1)
System.out.println(r1.toString)
System.out.println(r1.add(r2).toString)
var r3 = new Rational(2, 2)
System.out.println(r3)
System.out.println(r1 + r3)
}
} class Rational(n: Int, d: Int) {
//检查先决条件,不符合先决条件将抛出IllegalArgumentException
require(d != 0)
//最大公约数
private val g = gcd(n.abs, d.abs) private def gcd(a: Int, b: Int): Int = {
if (b == 0) a else gcd(b, a % b)
} //进行约分
val numer: Int = n / g
val denom: Int = d / g //辅助构造器
def this(n: Int) = this(n, 1) //定义操作符
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
)
} //方法重载
override def toString = numer + "/" + denom //定义方法
def add(that: Rational): Rational = {
new Rational(
numer * that.denom + that.numer * denom,
denom * that.denom
)
} //定义方法,自指向this可写可不写
def lessThan(that: Rational): Boolean = {
this.numer * that.denom < that.numer * this.denom
} }
Scala学习笔记——函数式对象的更多相关文章
- Scala学习笔记(6)对象
1.单例对象.Scala没有静态方法或字段,可以使用object这个语法结构来达到同样的目的.对象定义了单个实例,包含了你想要的特性. object Accounts{ def newUniqueNu ...
- Scala学习笔记--函数式编程
一.定义 简单说,"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论. 它属于"结构化编程&qu ...
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...
- Scala学习笔记及与Java不同之处总结-从Java开发者角度
Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...
- 【数学建模】MATLAB学习笔记——函数式文件
MATLAB学习笔记——函数式文件 引入函数式文件 说明: 函数式文件主要用于解决计算中的参数传递和函数调用的问题. 函数式的标志是它的第一行为function语句. 函数式文件可以有返回值,也可以没 ...
- Python学习笔记_Python对象
Python学习笔记_Python对象 Python对象 标准类型 其它内建类型 类型对象和type类型对象 Python的Null对象None 标准类型操作符 对象值的比較 对象身份比較 布尔类型 ...
- scala 学习笔记十 一 伴生对象
1.介绍 a.所谓伴生对象就是和某个class同名的object, 并且object 必须和class在同一个scala源文件中. b.在scala中,没有像java中的静态类,静态方法和静态成员等, ...
- 【大数据】Scala学习笔记
第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java 以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...
- Scala学习笔记 & 一些不错的学习材料 & 函数编程的历史八卦
参考这篇文章: http://www.ibm.com/developerworks/cn/java/j-lo-funinscala1/ 这也是一个系列 严格意义上的编程范式分为:命令式编程(Imper ...
随机推荐
- bzoj 4128 矩阵求逆
/************************************************************** Problem: 4128 User: idy002 Language: ...
- startup.bat闪退问题
startup.bat闪退问题 我自己遇到的 1.例如: 手动点击startup.bat 后 ,一闪而过 2例如:在cmd下 进到tomcat的bin目录 运行 startup.bat 解决问题,第一 ...
- mongodb group操作 以及管道 aggregate 分组排序分页
分组获取数据: db.express_info.group({ "key":{"express_code":true}, "initial" ...
- 跟着ZooKeeper学Java——CountDownLatch和Join的使用
在阅读ZooKeeper的源码时,看到这么一个片段,在单机模式启动的时候,会调用下面的方法,根据zoo.cfg的配置启动单机版本的服务器: public void runFromConfig(Serv ...
- jdk9+版本的bug
今天从jvm大神"你假笨"的公众号上,看到一个jdk 9+版本的编译bug,记录一下: public class JavacEvalBug{ private static Stri ...
- 斗鱼宣布获C轮15亿融资 直播行业进入资本时代
今天,斗鱼直播宣布完成C轮15亿人民币融资,本轮融资由凤凰投资与腾讯领投,深创投.国家中小企业基金.红土成长等跟投.2016年3月,斗鱼曾获得1亿美元(约合6.7亿元人民币)B轮融资,腾讯出资4亿人民 ...
- hdu4607Park Visit 树的直径
//给一棵双向树,数中边的权值为1,问对于这颗树中走k个节点的最短路径 //假设k小于这颗数的直径加1,那么走k个节点就没有反复的路,假设大于 //那么大于的节点都须要走两遍 #include< ...
- 【C#】Visual Studio 2017 一边Debug,一边修改代码
好久没写C#了,最近在学习著名***工具 shadowsocks-windows 的源代码,想着可以边断点调试,边加上一些注释以方便理解,stackoverflow 和 msdn 随便翻了一下,竟发现 ...
- 如何让FireFox/chrome新打开的标签页在后台打开,而不是立即跳转过去
firefox: 地址栏输入about:config 找到下面三项,全部设为true browser.tabs.loadInBackground browser.tabs.loadDivertedIn ...
- boost 线程安全队列
threadnullmethodsprocessingobjectsignal // QueueImplementation.cpp : Defines the entry point for the ...