scala编程第18章学习笔记——有状态的对象
银行账号的简化实现:
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@18532dc scala> account deposit 100 scala> account withdraw 80
res1: Boolean = true scala> account withdraw 80
res2: Boolean = false scala> 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.0C scala> t.celsius = 100
t.celsius: Float = 100.0 scala> t
res0: Thermometer = 212.0F/100.0C scala> t.fahrenheit = -40
t.fahrenheit: Float = -40.0 scala> t
res1: Thermometer = -40.0F/-40.0C
scala编程第18章学习笔记——有状态的对象的更多相关文章
- scala编程第17章学习笔记(3)
		可变(mutable)集合与不可变(immutable)集合 为了更易于完成不可变集合到可变集合的转换,或者反向转换,Scala提供了一些语法糖.纵使不可变集和映射并不支持真正的+=方法,Scala还 ... 
- scala编程第16章学习笔记(3)——List类的高阶方法
		列表间映射:map.flatMap和foreach 1.xs map f 操作返回把函数f应用在xs的每个列表元素之后由此组成的新列表.如: scala> List(1, 2, 3) map ( ... 
- scala编程第16章学习笔记(2)
		转换列表:toIterator, toArray,copyToArray List类的toArray方法将递归存放的列表转换为连续存放的数组 Array类的toList方法将连续存放的数组转换为递归存 ... 
- scala编程第16章学习笔记(1)
		List列表的基本操作 head方法获得列表的第一个元素 tail方法获得列表除第一个元素之外的其它元素 isEmpty:判断列表是否为空,空的话返回真 last:获得列表最后一个元素 init:获得 ... 
- scala编程第19章学习笔记(1)——类型参数化
		一.queues函数式队列 函数式队列是一种具有以下三种操作方式的数据结构: head 返回队列的第一个元素. tail 返回除第一个元素之外的队列. scala> import scala.c ... 
- scala编程第17章学习笔记(4)——元组
		元组可以把固定数量的条目组合在一起以便于作为整体传送.不像数组或列表,元组可以保存不同类型的对象. 元组常用来返回方法的多个值.例如,下面的方法找到集合中的最长单词并返回它的索引: scala> ... 
- scala编程第17章学习笔记(2)——集和映射
		默认情况下在使用“Set”或“Map”的时候,获得的都是不可变对象.如果需要的是可变版本,需要先写明引用. 如果同一个源文件中既要用到可变版本,也要用到不可变版本的集合或映射,方法之一是引用包含了可变 ... 
- scala编程第17章学习笔记(1)——集合类型
		列表 列表的初始化及对其首尾的访问: scala> val colors = List("red", "blue", "green") ... 
- scala编程第16章学习笔记(4)——List对象的方法
		通过元素创建列表:List.apply List(1, 2, 3) 等价于List.apply(1, 2, 3): scala> List.apply(1, 2, 3) res0: List[I ... 
随机推荐
- 【基础知识】.Net基础加强第01天
			1.#region *** 可以将一个代码块折叠起来 #endregion 2.Visiual stdio 快捷方式 Ctrl + K + C //注释代码 Ctrl + K + U //取消代码注释 ... 
- key  Value
			key 存值的编号 value 存放的数据 看来key 和value 可以为null~ public class Dog { private int id; private String name ... 
- Python处理海量数据的实战研究
			最近看了July的一些关于Java处理海量数据的问题研究,深有感触,链接:http://blog.csdn.net/v_july_v/article/details/6685962 感谢July ^_ ... 
- 02-c#基础之01-基础语法(一)
			1.注释符 1)注销 2) 解释 2.C#中的3种注释符 1)单行注释// 2)多行注释/*要注释的内容*/ 3)文档注释///多用来解释类或者方法 2.VS中的快捷键 
- hdu 4118 dfs
			题意:给n个点,每个点有一个人,有n-1条有权值的边,求所有人不在原来位置所移动的距离的和最大值.不能重复 这题的方法很有看点啊,标记为巩固题 Sample Input 1 4 1 2 3 2 3 2 ... 
- HDU 3535 AreYouBusy 经典混合背包
			AreYouBusy Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Su ... 
- 彻底解决每次打开visio都提示windows正在配置visio的问题
			出现这个提示windows正在配置XXX软件的问题,是由于在安装一个新的版本时,之前那个版本的office没有完全卸载,注册表内有残留. 最简单的方式,并不是 把HKEY_CURRENT_USER\S ... 
- centos 6.5安装rvm 配置 Ruby开发环境
			我是用ruby写测试脚本用 安装rvm也是费了好大劲 英文不易看懂 ,是个硬伤! rvm是ruby的版本管理工具 还可对ruby进行 安装 卸载 等 1.安装 curl # sudo yum ... 
- [Dynamic Language] pyspark Python3.7环境设置 及py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe解决!
			pyspark Python3.7环境设置 及py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spa ... 
- POJ 1470 Closest Common Ancestors (LCA, dfs+ST在线算法)
			Closest Common Ancestors Time Limit: 2000MS Memory Limit: 10000K Total Submissions: 13370 Accept ... 
