国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

scala操作符和關(guān)鍵字

2019-11-11 03:20:58
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

http://blog.csdn.net/yhb315279058/article/details/50242247

一元操作符:

后置一元操作符:后置一元操作符就相當(dāng)于普通的無(wú)參方法。
前置一元操作符:前置操作符被默認(rèn)轉(zhuǎn)成對(duì)名為 unary_操作符 的方法調(diào)用,例如:-a和a.unary_-一樣

賦值操作符:定義形如:操作符= 的操作符例如:a 操作符= b等價(jià)于:a=a 操作符 b注意:<=,>=和!=不是賦值操作符以=開頭的操作符不是賦值操作符
在scala中,所有的操作符都是左操作符,除了:以冒號(hào)(:)結(jié)尾的操作符賦值操作符
apply和updata方法:調(diào)用f(arg1,arg2,...)事實(shí)上是調(diào)用f.apply(arg1,arg2,...)調(diào)用f(arg1,arg2,...)=value事實(shí)上是調(diào)用f.update(arg1,arg2,...,value)
unapply和unapplySeq方法也叫做提取器例如:var Fraction(a,b)=Fraction(2,3)如果Fraction是定義了unapply方法的,那么就有a=2,b=3的結(jié)果。至于返回什么由用戶自己定義。unappluSeq和unapply差不多,unappluSeq可以定義任意返回長(zhǎng)度。
“++”操作符,用來(lái)連接兩個(gè)數(shù)組。
yield語(yǔ)法,和python中的差不多:yield語(yǔ)法會(huì)產(chǎn)生一個(gè)生成器,在scala中也可以當(dāng)做一個(gè)Array的形式。
type關(guān)鍵字:type可以用來(lái)重命名類型,例如 Type MyString = String,在以下的就可以把MyString當(dāng)做String來(lái)使用。
lazy關(guān)鍵字:使用lazy關(guān)鍵詞定義的變量會(huì)在第一次訪問(wèn)的時(shí)候初始化。lazy val、val、def的不同:lazy val:在第一次調(diào)用的時(shí)候執(zhí)行,執(zhí)行后保存下來(lái)。val:在定義的時(shí)候執(zhí)行。def:每次調(diào)用都會(huì)重新執(zhí)行。在多步驟,多次迭代的代碼中,使用lazy能夠保存下更多的步驟,這樣就有更大的優(yōu)化空間
implicit關(guān)鍵字:這是隱式轉(zhuǎn)化的關(guān)鍵字,是scala中的一大特色:
隱式轉(zhuǎn)換:例子:class RichFile(val file:File){def read = Source.fromFile(file.getPath()).mkString}object Context{implicit def file2RichFile(file:File)= new RichFile(file) //File -> RichFile}object Hello_Implicit_Conversions {def main(args: Array[String]) {import Context.file2RichFilePRintln(new File("E://WangJialin.txt").read) }}黃底部分用了隱式轉(zhuǎn)換
隱式參數(shù):隱式參數(shù)的作用其中一個(gè)就是提供默認(rèn)值,例如:object Context_Implicits{implicit val default:String = "Flink"}object Param{def print(content:String)(implicit language:String){println(language+":"+content)}}object Implicit_Parameters {def main(args: Array[String]) {Param.print("Spark")("Scala")import Context_Implicits._Param.print("Hadoop")}}
隱式類:代碼示例:object Context_Helper{ implicit class FileEnhancer(file : File){ def read = Source.fromFile(file.getPath).mkString }implicit class Op(x:Int){def addSAP(second: Int) = x + second}}object Implicits_Class {def main(args: Array[String]){import Context_Helper._println(1.addSAP(2))println(new File("E://WangJialin.txt").read) }}隱式類直接用來(lái)增強(qiáng)類的功能。
隱式對(duì)象:abstract class Template[T] {def add(x: T, y: T): T}abstract class SubTemplate[T] extends Template[T] {def unit: T}object Implicits_Object {def main(args: Array[String]) {implicit object StringAdd extends SubTemplate[String] {override def add(x: String, y: String) = x concat yoverride def unit: String = ""}implicit object IntAdd extends SubTemplate[Int] {override def add(x: Int, y: Int) = x + yoverride def unit: Int = 0}def sum[T](xs: List[T])(implicit m: SubTemplate[T]): T =if (xs.isEmpty) m.unitelse m.add(xs.head, sum(xs.tail))println(sum(List(1, 2, 3, 4, 5)))println(sum(List("Scala""Spark""Kafka")))}}這個(gè)的用途還不是特別了解

override關(guān)鍵字:轉(zhuǎn)自: http://my.oschina.net/aiguozhe/blog/39934

在Scala中,

1) 可以用override val 覆蓋父類或特質(zhì)中不帶參數(shù)的def , 但反過(guò)來(lái)不行, 比如

class Father{def name = "Archer"def score() = 1.0val id = 12}class Children extends Father{override val name = "Jack"override val score = 2.0override def id = 10 // error: error overriding value id in class Father of type Int; method id is not stable}

個(gè)人認(rèn)為這條規(guī)則可以這么記憶,因?yàn)閐ef表示一個(gè)函數(shù),函數(shù)返回值都有一個(gè)確定的范圍,比如上面的name函數(shù),它的返回值范圍是全體的字符串,由于val 表示一個(gè)常量,值的范圍已經(jīng)卻確定,因此如果子類要覆蓋父類的同名成員,其值的范圍不能更寬泛, 否則就破壞了里氏代換原則。顯然, def 所蘊(yùn)含的范圍要比 val 廣(注: 這段話是我瞎說(shuō),只是方便記憶)

2. 子類的def 可以 override 父類的def, 比如

class Father{def name = "Archer"def say() = "go to bed"def moveTo(x: Int, y: Int) = println("move to ("+x+","+y);}class Children extends Father{override def name() = "Jack"override def say() = "I'm not tired"override moveTo(x: Int, y: Int) = super.moveTo(x,y)}

3. 子類的var要override 父類的def 成員 , 不過(guò)def 必須成對(duì)出現(xiàn);但反過(guò)來(lái)不行
class Father{def credit = "abc"def credit_=(s: String) = (println("s"))}class Children extends Father{override var credit = "fff" // var can override a dual def}


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 山阴县| 卢龙县| 中方县| 通州区| 肥西县| 宝山区| 清新县| 太仓市| 道真| 信宜市| 南汇区| 始兴县| 新兴县| 南靖县| 卓资县| 承德县| 顺平县| 鹿泉市| 玉树县| 云南省| 贵港市| 巩义市| 塘沽区| 浦江县| 微博| 泸水县| 肥城市| 内江市| 高平市| 闸北区| 西丰县| 鄢陵县| 彭山县| 江源县| 哈尔滨市| 泰宁县| 尼勒克县| 澜沧| 彝良县| 舞钢市| 新丰县|