溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Scala2.8命名參數(shù)有哪些

發(fā)布時間:2021-12-09 09:05:50 來源:億速云 閱讀:127 作者:iii 欄目:編程語言

本篇內(nèi)容主要講解“Scala2.8命名參數(shù)有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Scala2.8命名參數(shù)有哪些”吧!

Scala 2.8引入了新的特性——命名參數(shù)——這意味著我們可以通過使用參數(shù)名來指定參數(shù)。命名參數(shù)可以避免在參數(shù)類型相同的情況下混淆各個參數(shù)的含義,增強了代碼的可讀性。

def resize(width: Int, height: Int) = { ... }  resize(width = 120, height = 42)

并且,Scala 2.8支持在方法中使用默認參數(shù)。在當前的版本的Scala中(指2.8之前的版本),只能通過方法重載來實現(xiàn)參數(shù)默認值。這在一定程度上導致代碼冗余,而默認參數(shù)可以避免這一點。

def f(elems: List[Int], x: Int = 0, cond: Boolean = true)  f(List(1))  f(Nil, cond = false)

上面的示例同時示范了命名參數(shù)允許選擇性使用默認參數(shù):在f方法的第二個調(diào)用中,f使用了參數(shù)x的默認值,而沒有使用cond的默認值。

編譯器生成copy方法

命名參數(shù)和默認參數(shù)一個非常有用的運用是編譯器自動為case類生成copy方法。這個方法采取一種輕量級的語法來創(chuàng)建一個原始實例的修改拷貝。copy方法具有和被拷貝的case類的基本構(gòu)造方法同樣類型和參數(shù),并且每個參數(shù)都使用基本構(gòu)造方法中相應值作為默認值。

case class A[T](a: T, b: Int) {  // def copy[T'](a: T' = this.a, b: Int = this.b): A[T'] = new A[T'](a, b)  }  val a1: A[Int] = A(1, 2)  val a2: A[String] = a1.copy(a = "someString")

Scala 2.8還未正式發(fā)布,但是其nightly build中已經(jīng)實現(xiàn)了上述功能。想提前體驗下么,點擊此處下載。需要了解更多關(guān)于命名參數(shù)與默認參數(shù)的內(nèi)容,請閱讀相應的SID。

Scala 2.8的所有新特性概述如下:

1.重新設(shè)計的集合框架。

Scala的集合類的層次結(jié)構(gòu)被重新設(shè)計,以更加規(guī)范,易用,高效。將會有一份白皮書闡述該設(shè)計。用戶大部分已有的代碼不會受到影響,但是那些對集合類的實現(xiàn)代碼,比如sequence,set,map,etc.需要修改以適應新的集合框架。

2.命名參數(shù)與默認參數(shù)。

方法的參數(shù)能夠通過參數(shù)名傳遞,并且參數(shù)能具有默認值。

3.Package object

現(xiàn)在不僅可以在源文件中定義package,而且可以使用一些特殊的object來定義package,該object內(nèi)列出的成員屬于該package。譬如,你可以在這樣的object中添加一些類型別名(type alias),這些類型別名將作為該package的成員從而可見。新的集合框架中使用該功能以保證向后兼容性。比如,List類在新的庫中位于scala.collection.immutable package中,而之前是位于scala package中。通過定義如下的package object使得之前使用List的代碼在新的集合框架中任然可用:

package object scala {    type List[+A] = scala.collection.immutable.List[A]    val List = scala.collection.immutable.List      ...  }

4. 增強的Scala Swing庫

scala.swing包中將增添一些新的功能,并且將具有更好的文檔說明。

5. continuations的支持

一個編譯器插件將做為Scala的附屬特性來支持continuations。這是通過一個類型引導的continuation傳遞轉(zhuǎn)換來完成的。Continuation對于諸如異步I/O,UI事件處理以及數(shù)據(jù)流并發(fā)之類的高級控制建造十分有幫助。

6.類型特殊化。
引入一個使用于類型參數(shù)的annotation:@specialize。該annotation能夠針對泛型代碼中的基本類型生成特殊的代碼,這樣可以避免昂貴的boxing 和 unboxing操作,以顯著提高代碼的執(zhí)行速度。

7.改善的REPL。
Scala的交互命令控制臺添加了一些新的功能,特別的命令完成功能將可以使用。

8.Packrat解析合并器(parser combinators)

Scala的解析合并器庫將升級至“packrat解析”。這對于效率有很大幫助,并且允許更多語法格式被表達為解析子(parser)。

之前版本中大部分被標為deprecated的類與方法在2.8中將被去除,并且不再支持Java1.4。class文件的格式會發(fā)生改變,因此Scala2.8與之前版本二進制文件不兼容。但很大程度上保持了源代碼兼容性。

到此,相信大家對“Scala2.8命名參數(shù)有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI