银行账号的简化实现:

scala> class BankAccount{| private var bal: Int = 0| def balance: Int = bal| def deposit(amount: Int) {| require(amount > 0)| bal += amount| }|| def withdraw(amount: Int): Boolean =| if (amount > bal) false| else{| bal -= amount| true| }| }
defined class BankAccount

BankAccount类定义了私有变量bal,以及三个公开的方法:balance返回当前余额;deposit向bal添加指定amount的金额;withdraw尝试从bal减少指定amount的金额并须要确保操作之后的余额不能变为负数。withdraw的返回值为Boolean类型,说明请求的资金是否被成功提取。

scala> val account = new BankAccount
account: BankAccount = BankAccount@18532dcscala> account deposit 100scala> account withdraw 80
res1: Boolean = truescala> account withdraw 80
res2: Boolean = falsescala> account.balance
res3: Int = 20

只定义getter和setter方法而不带有关联字段,这种做法不但可行,有时甚至很有必要。

scala> class Thermometer {| var celsius: Float = _| def fahrenheit = celsius * 9 / 5 + 32| def fahrenheit_= (f: Float) {| celsius = (f - 32) * 5 / 9| }| override def toString = fahrenheit + "F/" + celsius + "C"| }
defined class Thermometer

celsius变量初始化设置为缺省值‘—',这个符号指定了变量的”初始化值“。精确的说,字段的初始化器”=_”把零值赋给该字段。这里的“零”的取值取决于字段的类型。对于数值类型来说是0,布尔类型是false,应用类型则是null。

scala> val t = new Thermometer
t: Thermometer = 32.0F/0.0Cscala> t.celsius = 100
t.celsius: Float = 100.0scala> t
res0: Thermometer = 212.0F/100.0Cscala> t.fahrenheit = -40
t.fahrenheit: Float = -40.0scala> t
res1: Thermometer = -40.0F/-40.0C

转载于:https://www.cnblogs.com/gaopeng527/p/4190711.html

scala编程第18章学习笔记——有状态的对象相关推荐

  1. scala编程第16章学习笔记(1)

    List列表的基本操作 head方法获得列表的第一个元素 tail方法获得列表除第一个元素之外的其它元素 isEmpty:判断列表是否为空,空的话返回真 last:获得列表最后一个元素 init:获得 ...

  2. scala编程第17章学习笔记(2)——集和映射

    默认情况下在使用"Set"或"Map"的时候,获得的都是不可变对象.如果需要的是可变版本,需要先写明引用. 如果同一个源文件中既要用到可变版本,也要用到不可变版 ...

  3. scala编程第16章学习笔记(3)——List类的高阶方法

    列表间映射:map.flatMap和foreach 1.xs map f 操作返回把函数f应用在xs的每个列表元素之后由此组成的新列表.如: scala> List(1, 2, 3) map ( ...

  4. 《小马哥讲Spring核心编程思想》-第一章学习笔记(1)

    <小马哥讲Spring核心编程思想>-第一章学习笔记(1) 一.课程介绍 1.为什么要学习spring? 2.深入学习spring的难点有哪些? 3.课程的设计思路是怎样的? 二.内容综述 ...

  5. C++程序设计教程(钱能)第四章 学习笔记

    C++程序设计教程(钱能)第四章 学习笔记 4.1 名词解释与操作符 4.1.1 名词解释 4.1.2 操作符汇总 4.1.3 操作符的说明 4.2 算数运算问题 4.2.1 周而复始的整数 4.2. ...

  6. NVIDIA可编程推理加速器TensorRT学习笔记(二)——实操

    NVIDIA可编程推理加速器TensorRT学习笔记(二)--实操 ​ TensorRT 是 NVIDIA 自家的高性能推理库,其 Getting Started 列出了各资料入口,如下: 本文基于博 ...

  7. 知识图谱·概念与技术--第1章学习笔记--知识图谱概述--知识图谱的概念,与传统语义网络的区别

    知识图谱·概念与技术--第1章学习笔记--知识图谱概述--知识图谱的概念,与传统语义网络的区别 知识图谱的概念,与传统语义网络的区别 狭义概念 作为语义网络的内涵 与传统语义网络的区别 优点 缺点 与 ...

  8. 工程伦理第三章学习笔记2020最新

    工程伦理第三章学习笔记2020最新 因为之前自己在网上找答案总是觉得费劲,一道一道的找,很慢,突然找到了前两章的答案,感觉有一种前人种树后人乘凉的感觉,于是自己在艰难找完第三章习题并全对的情况下,将题 ...

  9. 多维随机变量及其分布——《概率论及其数理统计》第三章学习笔记

    多维随机变量及其分布--<概率论及其数理统计>第三章学习笔记 文章目录 多维随机变量及其分布--<概率论及其数理统计>第三章学习笔记 前言 MindMap 二维随机变量 定义与 ...

最新文章

  1. 学术圈竞赛圈大讨论,深度学习真的比不过GBDT模型吗?
  2. 电动力学每日一题 2021/10/13 用Fourier变换法计算静止电荷产生的电场
  3. 仿抖音注册Dialog实现
  4. 统计gitlab代码行脚本_详解代码统计工具cloc--计算文件数、空白行数、注释行和代码行...
  5. windows mysql kip grant tables_数据库mysql数据库mysql: [ERROR] unknown option '--skip-grant-tables'...
  6. 前端学习(1946)vue之电商管理系统电商系统之初步使用vue-table-with-tree
  7. c语言程序设计实验指导实验报告,C语言程序设计实验指导及报告.doc
  8. iOS之 开发学习笔记-block
  9. PHP怎么计算百分比?PHP计算百分比的写法
  10. excel几个数相加等于某个数_Excel如何在一串数字中找出几个之和等于某个特定值...
  11. 单模光纤最大传输距离为多少_单模光纤的最长传输距离有多远?单模,多模光纤有什么不同呢?...
  12. AI 场景存储优化:云知声超算平台基于 JuiceFS 的存储实践
  13. 电脑win7做系统备份
  14. 小象学院python网课值得吗-小象学院python
  15. Linux Suse修改主机名hostname
  16. MATLAB2014a,MEX编译问题
  17. NFT宝典:你需要知道NFT的术语和定义
  18. word选中所有图形
  19. C++ 程序 Crash 的分析
  20. 嵌入式硬件: EEPROM与EPROM

热门文章

  1. TensorFlow tf.feature_column
  2. 摄像头安装说明_老司机告诉你马路上不同摄像头有不同作用,注意区分小心扣分...
  3. mysql 初始化_Windows10安装mysql
  4. Android用外部应用打开文件,Android N 以上使用其他应用打开文件 FileProvider
  5. Kubernetes学习总结(9)—— 基础架构的未来是 K8s,那么 K8s 的未来在何方?
  6. 分库分表学习总结(4)——分布式事务常见应用场景总结
  7. 项目管理学习总结(10)——项目经理需要具备8点管理素质
  8. Linux学习总结(40)——史上最全Linux命令科普
  9. pythonwhile循环怎么修改数据类型_分级程序有while循环问题,使用不同的数据类型...
  10. 深入浅出 python epub_《机器学习从认知到实践(第2辑)(套装共3册,Python+TensorFlow)》epub+mobi+azw3...