2015-05-28
周海汉 2015.5.28
今天股市大跌6%,市值蒸发4万亿。携程数据被删除,流量导入艺龙,艺龙网站瘫痪。真是个祸不单行的日子。
case语法
scala实现数据结构Tree,并实现查找节点是否存在
zhh@test % cat tree.scala
abstract class IntTree
case object EmptyTree extends IntTree
case class Node(elem: Int, left: IntTree, right: IntTree) extends IntTree
object Tree {
def contains(t: IntTree, v: Int): Boolean = t match {
case EmptyTree => false
case Node(e, l, r) => e == v || contains(l, v) || contains(r, v)
}
def insert(t: IntTree, v: Int): IntTree = t match {
case EmptyTree => Node(v, EmptyTree, EmptyTree)
case Node(e, l, r) =>
if(e == v) t
else if(e > v) Node(e, insert(l, v), r)
else Node(e, l, insert(r, v))
}
def main(arr: Array[String]) {
val e=EmptyTree
var t=insert(e,10)
t=insert(t,11)
t=insert(t,8)
var c=contains(t,11)
println("tree:"+t)
println("contains 8?:"+c)
}
}
第一句是定义一个IntTree虚基类。
然后case打头,定义了一个静态单例的EmptyTree节点,继承于IntTree。
还cased打头定义了一个Node类。
case打头定义的类和单例与普通的类和单例有何不同?
-
case定义的类,可以不用new,直接使用。如val a=new Node(xxx),可以直接写成val a = Node(xxx)
-
getter函数对构造参数自动生成。如对某Node 实例n,直接用n.r获取右成员。
-
提供缺省的equals和hashCode方法及toString方法。
-
这些类实例可以用于模式匹配match…case
zhh@test % scalac tree.scala zhh@test % scala -classpath . Tree tree:Node(10,Node(8,EmptyTree,EmptyTree),Node(11,EmptyTree,EmptyTree)) contains 8?:true
如非注明转载, 均为原创. 本站遵循知识共享CC协议,转载请注明来源
FEATURED TAGS
css
vc6
http
automake
linux
make
makefile
voip
乱码
awk
flash
vista
vi
vim
javascript
pietty
putty
ssh
posix
subversion
svn
windows
删除
编译
多线程
wxwidgets
ie
ubuntu
开源
c
python
bash
备份
性能
scp
汉字
log
ruby
中文
bug
msn
nginx
php
shell
wordpress
mqueue
android
eclipse
java
mac
ios
html5
js
mysql
protobuf
apache
hadoop
install
iocp
twisted
centos
mapreduce
hbase
thrift
tutorial
hive
erlang
lucene
hdfs
sqoop
utf8
filter
草原
yarn
ganglia
恢复
scrapy
django
fsimage
flume
tail
flume-ng
mining
scala
go
kafka
gradle
cassandra
baas
spring
postgres
maven
mybatis
mongodb
https
nodejs
镜像
心理学
机器学习
Keras
theano
anaconda
docker
spark
akka-http
json
群论
区块链
加密
抽象代数
离散对数
同余
欧拉函数
扩展欧几里德算法
ES6
node-inspect
debug
win10
vscode
挖矿