中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

scala的類型推斷是什么

發布時間:2021-12-08 14:56:04 來源:億速云 閱讀:171 作者:iii 欄目:大數據

本篇內容主要講解“scala的類型推斷是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“scala的類型推斷是什么”吧!

Scala 編譯器通常可以推斷出表達式的類型,因此你不必顯式地聲明它。

省略類型

val businessName = "Montreux Jazz Café"

編譯器可以發現 businessName 是 String 類型。它的工作原理和方法類似:

def squareOf(x: Int) = x * x

編譯器可以推斷出方法的返回類型為 Int,因此不需要明確地聲明返回類型。

對于遞歸方法,編譯器無法推斷出結果類型。下面這個程序就是由于這個原因而編譯失敗:

def fac(n: Int) = if (n == 0) 1 else n * fac(n - 1)

當調用 多態方法 或實例化 泛型類 時,也不必明確指定類型參數。Scala 編譯器將從上下文和實際方法的類型/構造函數參數的類型推斷出缺失的類型參數。

看下面兩個例子:

case class MyPair[A, B](x: A, y: B)val p = MyPair(1, "scala")
def id[T](x: T) = xval q = id(1)

編譯器使用傳給 MyPair 參數的類型來推斷出 AB 的類型。對于 x 的類型同樣如此。

參數

編譯器從不推斷方法形式參數的類型。但是,在某些情況下,當函數作為參數傳遞時,編譯器可以推斷出匿名函數形式參數的類型。

Seq(1, 3, 4).map(x => x * 2)

方法 map 的形式參數是 f: A => B。因為我們把整數放在 Seq 中,編譯器知道 AInt 類型 (即 x 是一個整數)。因此,編譯器可以從 x * 2 推斷出 BInt 類型。

何時 不要 依賴類型推斷

通常認為,公開可訪問的 API 成員應該具有顯示類型聲明以增加可讀性。 因此,我們建議你將代碼中向用戶公開的任何 API 明確指定類型。

此外,類型推斷有時會推斷出太具體的類型。 假設我們這么寫:

var obj = null

我們就不能進行重新賦值:

obj = new AnyRef

它不能編譯,因為 obj 推斷出的類型是 Null。由于該類型的唯一值是 null,因此無法分配其他的值。

到此,相信大家對“scala的類型推斷是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

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

AI

牡丹江市| 宁武县| 鹰潭市| 会泽县| 旺苍县| 阆中市| 开化县| 河北省| 平谷区| 雅安市| 延寿县| 昌吉市| 凤庆县| 黑龙江省| 左权县| 宝丰县| 射洪县| 法库县| 蓝田县| 望江县| 益阳市| 金阳县| 盐津县| 丘北县| 漯河市| 克什克腾旗| 柳林县| 莎车县| 乃东县| 绥化市| 新河县| 白银市| 裕民县| 余姚市| 荥经县| 海门市| 凤山县| 正蓝旗| 柘荣县| 尤溪县| 德保县|