文档章节

函数式对象之私有字段和方法

柳哥
 柳哥
发布于 2014/06/06 17:22
字数 454
阅读 49
收藏 0
点赞 0
评论 0

上一个版本的Rational里,我们只是分别用n初始化了number,用d初始化了denom。结果Rational的分子和分母可能比实际需要的要大。例如有理数66/42,可以简化为11/7。但目前Rational的主构造器没有这个功能。
有理数的简化,需要把分子和分母都除以最大公约数。如:66和42的最大公约数是6。66/42的分子和分母都除以6就产生它的最简形式11/7。见下面这个例子:

package scalaTest
class Rational(n:Int,d:Int) {
    require(d != 0) 
    private val g = gcd(n.abs,d.abs)    //注意这里
    val number:Int = n/g
    val denom:Int = d/g
    def this(n:Int) = this(n,1)
    override def toString = number + "/" + denom
    def add(that:Rational):Rational = {
        new Rational(number * that.denom + that.number * d,d * that.denom)
    }
    def lessThan(that:Rational) = {
        this.number * that.denom < that.number * this.denom
    }
    def max(that:Rational) = {
        if(this.lessThan(that)) that else this
    }
    private def gcd(a:Int,b:Int):Int = {        //注意这里
        if(b == 0) a else gcd(b,a % b)
    }
}
这里,我们添加了 私有字段g,并修改了number和denom的初始化。因为g是私有的,所以只能在类的主体之内被访问,外部不可见。我们还添加了 私有方法gcd用来计算传入的两个数的最大公约数。另外,把 private关键字放在 字段方法定义之前可以让定义 私有化
Scala编译器把Rational三个字段的初始化依照它们在源代码中出现的次序放入主构造器。所以g的初始化代gcd(n.abs,d.abs)将在另外两个之前执行,因为它在源文件中出现得最早。g将被初始化为类参数n和d的绝对值的最大公约数,然后再被用于number和denum的初始化。

© 著作权归作者所有

共有 人打赏支持
柳哥
粉丝 202
博文 394
码字总数 347782
作品 0
杭州
技术主管
C#基础知识系列五(构造函数)

前言   本节主要来学习下实例构造函数、私有构造函数和静态构造函数。   构造函数的作用:   1、当一个类在new实例化对象时,可调用构造函数进行初始化对象。   2、不带参数的构造函...

aehyok ⋅ 2014/01/13 ⋅ 0

类和对象之类与字段和方法

类是对象的蓝图,一旦你定义了类,就可以用关键字new根据类的蓝图创建对象。类定义里,可以放置字段和方法,这些被笼统地称为成员。字段,不管是用val还是用var定义的,都是指向对象的变量。...

柳哥 ⋅ 2014/06/05 ⋅ 0

F#探险之旅(四):面向对象编程(中)

F#系列随笔索引 对象表达式(Object Expressions) F#中的OOP语法很简洁,而对象表达式则正是这种简洁性的核心所在。通过对象表达式,我们可以创建抽象类或接口的轻量级实现,也可以对一个具...

长征3号 ⋅ 2017/12/13 ⋅ 0

python 面向对象二

私有字段 ( filed) 不想被外部访问或不想暴露给外部的内容,可以定义一个 私有字段 self.xxx 私有字段不能被 对象和 类直接访问,需要 定义 1个函数来访问 (不推荐,相当于暴露) 私有方法:...

明月知心 ⋅ 2016/11/22 ⋅ 0

我设计的Fief语言简介,希望找志同道合的人一起实现

Fief语言简介 Fief语言是面向对象的,支持泛型的,简洁的语言 特点 1.面向接口编程 接口是只有成员声明而没有实现的集合体. 一个类可以显示声明对接口的继承,也可以不声明. 一个类只有实现一个...

太医 ⋅ 2013/12/06 ⋅ 16

python 面向对象(进阶篇)

上一篇《Python 面向对象(初级篇)》文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(...

米斯特赛文 ⋅ 2015/10/20 ⋅ 0

[C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型

引言   经过前面专题的介绍,大家应该对C# 1和C# 2中的特性有了进一步的理解了吧,现在终于迎来我们期待已久的C# 3中特性,C# 中Lambda表达式和Linq的提出相当于彻底改变我们之前的编码风格了...

技术小胖子 ⋅ 2017/11/08 ⋅ 0

C#基础知识系列六(静态类和静态类成员)

静态类   静态类与非静态类基本相同,但存在一个区别:静态类不能实例化。 也就是说,不能使用 new 关键字创建静态类类型的变量。 因为没有实例变量,所以要使用类名本身访问静态类的成员。...

aehyok ⋅ 2014/01/14 ⋅ 0

JS 面向对象的小杂碎

封装:通过将一个方法或者属性声明为私有的,可以让对象的实现细节对其他对象保密以降低对象间的耦合程度,可以保持数据的保证性并对其修改方式加以约束,这样可以使代码更加可靠,更加易于调...

冯尚实 ⋅ 2011/09/24 ⋅ 0

Javascript学习之prototype

Javascript是一种基于原型的语言,和我们通常的Class based programming有很大的区别: 1. 函数式first class object,也就是说函数与对象具有相同的语言地位 2. 没有类,一切基于对象 3. 函...

浅色的我 ⋅ 2016/02/08 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

分布式数据库中间件DDM的实现原理

随着数据量不断增大,传统的架构模式难以解决业务量不断增长所带来的问题,特别是在业务成线性、甚至指数级上升的情况。此时我们不得不通过水平扩展,把数据库放到不同服务器上来解决问题,也...

中间件小哥 ⋅ 9分钟前 ⋅ 0

字符编码那点事:快速理解ASCII、Unicode、GBK和UTF-8

原作者:阮一峰(ruanyifeng.com),现重新整理发布,感谢原作者的无私分享。 1、引言 今天中午,我突然想搞清楚 Unicode 和 UTF-8 之间的关系,就开始查资料。 这个问题比我想象的复杂,午饭...

JackJiang- ⋅ 16分钟前 ⋅ 0

Spring Cloud构建微服务架构:服务消费(基础)

使用LoadBalancerClient 在Spring Cloud Commons中提供了大量的与服务治理相关的抽象接口,包括DiscoveryClient、这里我们即将介绍的LoadBalancerClient等。对于这些接口的定义我们在上一篇介...

itcloud ⋅ 17分钟前 ⋅ 0

MaxCompute产品最新进展 -- 从马力到计算力

摘要:本文从马力作为功率衡量标准为切入点,介绍了大数据领域的计算力衡量标准TPCBB以及MaxCompute2.0在Big Bench上的卓越表现。同时详细地分享了取得优异成绩背后的产品在最新有哪些进展,...

猫耳m ⋅ 17分钟前 ⋅ 0

Linux系统

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 Linux系统: Unix:是C语言转做出来的,最早的网...

凯哥学堂 ⋅ 17分钟前 ⋅ 0

13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令

13.1 设置更改root密码 启动MySQL数据库 [root@linux-10 ~]# /etc/init.d/mysqld startStarting MySQL SUCCESS! 由于MySQL的相关命令的所在路径不在系统的环境变量中,因此需要将路径添...

影夜Linux ⋅ 20分钟前 ⋅ 0

jeesite shiro+redis实现cache和session共享

jeesite这个开源框架本身集成的有shiro+redis来实现cache和session共享,但是需要修改一下文件配置即可 首先找到spring-context-shiro.xml文件 找到bean id为sessionDAO,将其修改为如下 <!...

wangxujun59 ⋅ 20分钟前 ⋅ 0

基本JNI搭建

1、编写Java代码 首先我们需要编写自己的java代码 public class Hello { static{ System.loadLibrary("hello-jni"); } public native String sayHello();} 2、把...

国仔饼 ⋅ 22分钟前 ⋅ 0

MaxCompute产品最新进展 -- 从马力到计算力

摘要:本文从马力作为功率衡量标准为切入点,介绍了大数据领域的计算力衡量标准TPCBB以及MaxCompute2.0在Big Bench上的卓越表现。同时详细地分享了取得优异成绩背后的产品在最新有哪些进展,...

阿里云云栖社区 ⋅ 26分钟前 ⋅ 0

AppDelegate 设置Root相关

self.window = UIWindow.init(frame: UIScreen.main.bounds) self.window?.backgroundColor = UIColor.white self.window?.makeKeyAndVisible() self.window?.rootViewController = RootTabB......

west_zll ⋅ 34分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部