博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数式对象之私有字段和方法
阅读量:5821 次
发布时间:2019-06-18

本文共 1152 字,大约阅读时间需要 3 分钟。

hot3.png

上一个版本的Rational里,我们只是分别用n初始化了number,用d初始化了denom。结果Rational的分子和分母可能比实际需要的要大。例如有理数66/42,可以简化为11/7。但目前Rational的主构造器没有这个功能。

有理数的简化,需要把分子和分母都除以最大公约数。如:66和42的最大公约数是6。66/42的分子和分母都除以6就产生它的最简形式11/7。见下面这个例子:

package scalaTestclass 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的初始化。

转载于:https://my.oschina.net/fhd/blog/275268

你可能感兴趣的文章
云时代架构读后感(一)
查看>>
MySQL案列之主从复制出错问题以及pt-slave-restart工具的使用
查看>>
在JS中调用JAVA变量
查看>>
linux 查看剩余内存数
查看>>
loadrunner 怎么能得到返回的http状态?
查看>>
《SQL CookBook 》笔记-第三章-多表查询-连接查询
查看>>
测试人员容易遗漏的隐藏缺陷
查看>>
JS方法:数字转换为千分位字符
查看>>
maven+SpringMVC搭建RESTful后端服务框架
查看>>
[HDU5714]拍照
查看>>
[BalkanOI2016]Cruise
查看>>
《陶哲轩实分析》定理10.1.15:导数的链法则
查看>>
有理数的小数表示若无限,则必为无限循环的
查看>>
一本书的摘录
查看>>
重排序(转载)
查看>>
python+selenium之字符串切割操作
查看>>
串结构练习——字符串匹配
查看>>
linux下输入密码不回显
查看>>
《构建之法》读书笔记
查看>>
拿下阿里、头条、滴滴的offer后谈谈面试经验---动身前看一看
查看>>