文档章节

scala学习(三)

 如风达
发布于 2015/09/07 14:37
字数 1012
阅读 80
收藏 0

scala类:

scala中类定义里,可以放置字段和方法,这些被统称为成员(memeber)

所有成员默认是共有的,如java中默认带public一样

scala中不能定义静态成员,但是可以定义单例对象,用法java的static成员用法一样,对象名.成员。

如果定义的一个class A与object A并且他们在同一个文件里面他们就是伴生关系(singleton)class A是 object A的伴生类,反过来object A是class A的伴生对象,他们可以相互访问对方的私有成员

scala中private修饰了的成员,同一个类型的对象可以访问另一个同类型的私有成员.如:

classA{private val other =  1; def A(a:A){a.other+1}}

限定只能当前类使用:使用private[this]

classA{private[this] val other =  1; def A(){other+1}}

scala中的构造器有一个主构造器和多个副构造器,组构造器是在创建class A类的时候就已经定义了,如果让主构造器new 的时候就带参数就class A(val name : String){ }必须要带上val或var,不然他不会生成对应成员,只是当做一个val的构造器参数。

如果成员加上@BeanProperty 注解 如:@BeanProperty  var name : String = "" scala会默认的给他生成getName和setName这2个方法。

如果想让主构造器变成私有的可以class A private (val name : String){ def this(){this(name)} } 这样用户只能调用副构造器来构造A对象了。主构造器是有参构造,副构造器是无参构造。

如果有确实值class A private(val name : String = "san"){}用到时的时候可以new A就可以得到类的实例。

scala中的嵌套类的创建方式 new 外部类.嵌套类,java中的内部类的创建方式 new 外部类().new 内部类();并且在scala在使用嵌套类的时候他的类型是为外部类.嵌套类(如类型为 my.foot 或 her.foot)表示这个我的脚与她的脚是不通的类型。

scala中的类型投影:val a = new ArrayBuffer[Network#Member] 其含义是“任何Network的Member”

require(d != 0) Scala 中的方法、主构造器要求调用发必须满足的先决条件,是一种限制,确保了程序的正常运行。看起来功能类似于断言机制,但是 Scala 中也有断言啊,所以我目前还不明白这两者的区别所在。

闭包:函数字面量在运行时创建的函数值被称为闭包。如:var y=1;val addMore = (x:Int) => x+y

闭封项:不带自由变量的函数字面量被称为闭封项。如:val addMore = (x:Int) => x + 1

重复参数:def echo(args : String*) = args.foreach(println);String*的args实际上是Array[String],如果你想将Array[String]类型当做参数传去echo中的话,传入的时候加上"_*",这个是标注告诉编译器把arr的原素当做参数,而不是单一的参数传给echo。val arr=Array("Hello","world");  val a = echo(arr: _*);

尾递归:当递归最后一个动作是调用自己的函数时我们就称这个递给是尾递归。

柯里化(currying):柯里化的函数是被应用于多个参数列表,而不仅仅是一个。

                               如:def  a(x:Int,y:Int) = x + y; 柯里化后:def a(x:Int)(y:Int) = x + y;

                               柯里化的实质是先传入x=1,返回一个函数 def b(y:Int) = 1 + y;在将y传入得到值。

传递一个函数:def a(x:Int,func:(Int,Int)=>Int),func就是传入一个带2个Int参数,返回一个Int值得函数。

传名参数:def a(x : => Boolean){ println(x)}def b(x : ()=> Boolean){ println(x)}省略(),调用的时候可以

                   a(1>2),但是函数b只能b(()=>1>2)。传名参数是先创建一个函数,其apply方法将评估1>2。在传递给a.与

                   def c(x:Boolean){println(x)}不一样,c(1>2)是先评估1>2的值直接传给c

© 著作权归作者所有

粉丝 7
博文 256
码字总数 22313
作品 0
深圳
私信 提问
学习Scala的朋友们,你们都有哪些书籍可以推荐一下

就是能不能推荐一下你们学习Scala时用的书啊,我个人看完了《Scala编程》,看过一点《Scala Overview》、《Scala By Example》,还有听过《Scala程序设计:Java虚拟机多核编程实践》今天也去...

mj4738
2012/04/04
12.1K
5
spark2.x由浅入深深到底系列六之RDD java api调用scala api的原理

学习spark任何的技术之前,请正确理解spark,可以参考:正确理解spark RDD java api其实底层是调用了scala的api来实现的,所以我们有必要对java api是怎么样去调用scala api,我们先自己简单...

tangweiqun
2017/09/17
0
0
Intellij IDEA 11.1.3+Scala环境搭建

最近由于科研需要,开始学习Scala。阅读了很多的帖子,也看了很多的讨论,决定使用Intellij IDEA这个IDE。 开始试着按照网上的帖子,进行Intellij IDEA + Scala环境的搭建,却没有成功。帖子...

找一片天空散步
2012/10/18
12.7K
17
Scala高阶函数、闭包、​柯里化

一、高阶函数 二、闭包 三、柯里化 四、Actor 一、高阶函数 scala的高阶函数: 二、闭包 scala 的闭包:函数里面引用外面类成员变量叫作闭包.例: 三、柯里化 四、Actor scala的多线程Actor...

wenhui12345
2017/12/08
0
0
Scala 学习笔记 模式匹配

1. 模式匹配简介 模式匹配是 Scala 的重要特性之一,前面两篇笔记Scala学习笔记(六) Scala的偏函数和偏应用函数、Scala学习笔记(七) Sealed Class 和 Enumeration都是为了这一篇而铺垫准备的...

Tony沈哲
2017/05/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

iptables删除命令中的相关问题

最近在做一个中间件的配置工作,在配置iptables的时候,当用户想删除EIP(即释放当前连接),发现使用iptables的相关命令会提示错误。iptables: Bad rule (does a matching rule exist in t...

xiangyunyan
27分钟前
2
0
IT兄弟连 HTML5教程 HTML5表单 新增的表单属性1

HTML5 Input表单为<form>和<input>标签添加了几个新属性,属性如表1。 1 autocomplete属性 autocomplete属性规定form或input域应该拥有自动完成功能,当用户在自动完成域中开始输入时,浏览器...

老码农的一亩三分地
55分钟前
5
0
OSChina 周五乱弹 —— 葛优理论+1

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @这次装个文艺青年吧 :#今日歌曲推荐# 分享米津玄師的单曲《LOSER》: mv中的舞蹈诡异却又美丽,如此随性怕是难再跳出第二次…… 《LOSER》-...

小小编辑
今天
1K
19
nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多...

码农实战
今天
5
0
Spring Security 实战干货:玩转自定义登录

1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证(Authentication),认证...

码农小胖哥
今天
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部