scala 知识点

一、控制循环

1、保存for循环的返回值:使用yield关键字;例如:

var x = for(i <- 0 to 10) yield i;

2 保存if的返回值,例如:

var x = for(true) 1000; else 0;

二、数据结构

1、Set集合

使用Set("1", "2")创建

使用"1" :: "2" :: Nil 创建

for(k<- set)println(key)遍历

set.foreach(e=>println(e))

set.foreach(println);

set foreach println

set forea

2、Map映射

使用Map("name"->"sun", "age"->"30")来创建

map("age")=31 更新

map("rank")="senior" 新增加

map += ("sex"->"male");新增

for((k,v)<-map) 遍历

map.foreach(e=>println(e._1))

map.foreach(println(_))

map foreach println

三、getter setter

def value = innerValue;

def value_(newValue) = {innerValue = newValue;}

四、apply和update

对于伴生对象调用(),会调用伴生对象的apply  例如Class()

 对于伴生类调用(),会调用伴生类的apply方法,例如instance()

而对伴生类进行()赋值时会调用伴生类的update,例如:array(0) = 1; 之所以能用()其实是利用了update进行语法糖处理;

五、抽象类、继承和override

abstract class Car {

    var name:String = "BMW";

    def start();  //抽象方法

    def message() = { println("message"); }

}

abstract class AUDICar extends Car {

    override var name:String = "AUDI";

    def start() = {} //覆盖ia抽象方法,不用使用override

    override def message() = { println("AUDI");} //使用override关键字

}

六、特质trait

通过extends或者with来混入特质

例如Card extends trait1 with trait2

七、Option[T]

1、Option 就是一个可选值,要么就是Some[T],要么就是 None

也可以对Option[T]调用getOrElse,设定None的被选项

八、函数的类型和值

1、传统的函数定义方式:

def counter(v:Int) : Int = { v + 1}

2、该函数的类型如下 : (Int)=>Int , 当参数只有一个时,也即 Int=>Int

所有我们可以定义一个函数变量,例如 var a:Int=>Int; 表明a是一个函数类型, 函数的输入类型为Int ,函数返回类型为Int;

要注意是=>,而不是=,这是scala的语法要求。

3、函数的值

上面函数的值是 (v:Int)=>{v + 1} , 因为只有一条语句,也即(v:Int)=>v + 1;

所以我们可以完整的定义一个函数变量、并赋值,例如:

var a:Int=>Int = (v:Int)=>v+1; 这时要注意该写法与传统写法1的区别;

也可以 var a:Int=>Int={ (v:Int)=>{v + 1} }; 

由于scala有类型推断的能力,所以也可以写成

var a = (v:Int)=>v + 1;


九、匿名函数

var func:Int=>Int = (num:Int)=>num + 1;

func的类型是(Int)=>Int,参数只有一个时,可以省略()

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容