文档章节

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

柳哥
 柳哥
发布于 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阻止对象被构造,如例:

© 著作权归作者所有

共有 人打赏支持
柳哥
粉丝 206
博文 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
[译] 关于 SPA,你需要掌握的 4 层 (1)

此文已由作者张威授权网易云社区发布。 欢迎访问网易云社区,了解更多网易技术产品运营经验。 原文地址:The 4 Layers of Single Page Applications You Need to Know 原文作者:Daniel Dugh...

网易云
2018/11/21
0
0
前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型

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

grootzhang
2016/09/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

脚本配置java开发环境

@echo off&setlocal enabledelayedexpansion cls @echo "This script is used to registe envionment variables......" @echo. @echo. @echo. set var=%~dp0 set var=%var:~,-1% @echo "regi......

默克鱼
33分钟前
1
0
c++中友元函数理解与使用

在学习c++这一块,关于友元函数和友元类,感觉还是不好理解,但是井下心来,理解,需要把我一下几点。 首先讲友元函数。 (1)友元函数: 1)C++中引入友元函数,是为在该类中提供一个对外(除...

天王盖地虎626
今天
2
0
OSChina 周一乱弹 —— 白掌柜说了卖货不卖身

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @爱漫爱 :这是一场修行分享羽肿的单曲《Moony》 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :开不开心? 开心呀, 我又不爱睡懒觉…...

小小编辑
今天
917
11
大数据教程(11.7)hadoop2.9.1平台上仓库工具hive1.2.2搭建

上一篇文章介绍了hive2.3.4的搭建,然而这个版本已经不能稳定的支持mapreduce程序。本篇博主将分享hive1.2.2工具搭建全过程。先说明:本节就直接在上一节的hadoop环境中搭建了! 一、下载apa...

em_aaron
今天
5
0
开始看《JSP&Servlet学习笔记》

1:WEB应用简介。其中1.2.1对Web容器的工作流程写得不错 2:编写Servlet。搞清楚了Java的Web目录结构,以及Web.xml的一些配置作用。特别是讲了@WebServlet标签 3:请求与响应。更细致的讲了从...

max佩恩
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部