文档章节

函数式对象之检查先决条件

柳哥
 柳哥
发布于 2014/06/06 15:08
字数 289
阅读 41
收藏 0

面向对象编程的优点之一就是它允许你把数据封装在对象之内以确保数据在整个生命周期中的有效性。像Rational这样的不可变对象,这就意味着你必须确保对象创建时数据的有效性。由于零做分母对Rational来说是无效状态,因此在把零传递给d的时候,务必不能让Rational被构建出来。解决这个问题的最佳方案是为主构造器定义先决条件(precondition)说明d必须为非零值先决条件是对传递给方法或构造器的值的限制,是调用者必须满足的需求。
一种方式是使用require方法(注:require方法定义在scala包的孤立对象Predef上),如例:

package scalaTest
class Rational(n:Int,d:Int) {
    require(d != 0)    //先决条件
    override def toString = n + "/" + d
}
object M1 {
    def main(args:Array[String]){
        println(new Rational(1,2))
    }
}

require方法带一个布尔型参数如果传入的值为真,require将正常返回。反之,require将抛出IllegalArgumentException阻止对象被构造,如例:

© 著作权归作者所有

共有 人打赏支持
柳哥
粉丝 203
博文 405
码字总数 347782
作品 0
杭州
技术主管
在C语言中用ASSERT调试的八个技巧

在C语言中用ASSERT调试的八个技巧 Mindy2017-02-0256 阅读 技巧C语言调试 C语言中的 ASSERT (断言)宏是 嵌入式软件 开发人员可以使用的最好的调试工具之一。虽然ASSERT功能强大,但我很少看到...

Mindy
2017/02/02
0
0
python核心编程笔记chapter 8

if语句: 三部分 关键字本身、判断真假的表达式、条件为真时执行的代码块 else语句:避免“悬挂else” elif语句(else-if): 条件表达式(即三元操作符):X if C else Y while语句:代码块...

MRFung
2015/12/28
20
0
Making your C++ code robust

Cleaning Up Released Handles 在释放一个句柄之前,务必将这个句柄复制伪NULL (0或则其他默认值)。这样能够保证程序其他地方不会重复使用无效句柄。看看如下代码,如何清除一个Windows A...

开心303
2011/11/03
0
0
前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型

前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话):   有人说拖延症是一个绝症,哎呀治不好了。先不说这是一个每个人都多多少少会有的,也不管它究竟对...

grootzhang
2016/09/24
0
0
JavaScript函数编程-Ramdajs

在JavaScript语言世界,函数是第一等公民。JavaScript函数是继承自Function的对象,函数能作另一个函数的参数或者返回值使用,这便形成了我们常说的高阶函数(或称函数对象)。这就构成函数编...

zting科技
2017/01/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSX | SafariBookmarksSyncAgent意外退出解决方法

1. 启动系统, 按住⌘-R不松手2. 在实用工具(Utilities)下打开终端,输入csrutil disable, 然后回车; 你就看到提示系统完整性保护(SIP: System Integrity Protection)已禁用3. 输入reboot回车...

云迹
今天
4
0
面向对象类之间的关系

面向对象类之间的关系:is-a、has-a、use-a is-a关系也叫继承或泛化,比如大雁和鸟类之间的关系就是继承。 has-a关系称为关联关系,例如企鹅在气候寒冷的地方生活,“企鹅”和“气候”就是关...

gackey
今天
4
0
读书(附电子书)|小狗钱钱之白色的拉布拉多

关注公众号,在公众号中回复“小狗钱钱”可免费获得电子书。 一、背景 之前写了一篇文章 《小狗钱钱》 理财小白应该读的一本书,那时候我才看那本书,现在看了一大半了,发现这本书确实不错,...

tiankonguse
今天
4
0
Permissions 0777 for ‘***’ are too open

异常显示: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ......

李玉长
今天
5
0
区块链10年了,还未落地,它失败了吗?

导读 几乎每个人,甚至是对通证持怀疑态度的人,都对区块链的技术有积极的看法,因为它有可能改变世界。然而,区块链技术问世已经10年了,我们仍然没有真正的用上区块链技术。 几乎每个人,甚...

问题终结者
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部