偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Scala創(chuàng)始人致信51CTO:全面解答Scala的泛型優(yōu)勢(shì)

原創(chuàng)
開(kāi)發(fā) 后端
Scala編程語(yǔ)言可以說(shuō)是基于JVM的語(yǔ)言中最具有潛力的一個(gè)。在Scala創(chuàng)始人Martin Odersky的訪談中可以看出,泛型是他創(chuàng)建Scala的主要原因之一。近日,在51CTO編輯阿菜與Martin的電子郵件來(lái)往中,Martin詳細(xì)揭示了Scala泛型相對(duì)于Java泛型的優(yōu)越之處。

51CTO開(kāi)發(fā)頻道最新推薦:Scala編程語(yǔ)言專題

【51CTO獨(dú)家特稿】Scala創(chuàng)始人Martin Odersky的訪談錄在51CTO已經(jīng)連續(xù)發(fā)表了一月有余,讀者的反映十分熱烈。訪談中,Martin介紹了很多Scala的設(shè)計(jì)理念以及語(yǔ)言特性,對(duì)于程序員了解Scala編程語(yǔ)言有著極大的幫助。然而,在很多具體的方面,限于訪談時(shí)間與篇幅的關(guān)系,Martin并沒(méi)能夠給予足夠的解釋。為此,51CTO的編輯于近日致電郵向其詢問(wèn),并很快得到了來(lái)自Martin的回信。信件包括幾個(gè)方面的內(nèi)容,本文主要介紹有關(guān)Scala泛型方面的。

第一篇訪談中,Martin講到了他在設(shè)計(jì)Java泛型時(shí)遇到的約束,而正是Java的約束性令Martin產(chǎn)生了創(chuàng)建一個(gè)超越Java的新語(yǔ)言的念頭,并最終因此產(chǎn)生了Scala編程語(yǔ)言。而在之后有關(guān)Scala的類型系統(tǒng)部分中,Martin解釋道,“Scala像Java一樣,使用泛型擦除模式(erasure),所以當(dāng)程序運(yùn)行時(shí),我們不再能看到類型參數(shù)。這是為了能與Java互用而進(jìn)行的設(shè)計(jì)”。另外,51CTO的編輯也在其他Scala的用戶那里看到這樣的疑問(wèn),說(shuō)“聽(tīng)說(shuō)Scala在泛型上超越了Java,但具體是哪些方面,我也搞不清楚?!睘榇耍]件中的問(wèn)題之一就是:

具體來(lái)說(shuō),Scala在泛型上有哪些方面比Java更加好用呢?

以下是Martin Odersky的回答:

首先是Arrays。Scala中的array可以取泛型參數(shù)(parameterized types)以及類型變量(type variables)來(lái)做其元素的類型。這兩項(xiàng)在Scala中是可能的,但在Java中是不可能完成的:

  1. val xs = new Array[List[Int]](leng)  
  2. val ys = new Array[T](len)  // 這里的T是類型變量 

我在Java泛型中感到最煩人的缺點(diǎn)之一就是array泛型的缺乏。要實(shí)現(xiàn)array的泛型,必要的步驟就是讓array變成非變量(non-variant)。Java無(wú)法做到這一點(diǎn),這是因?yàn)槠湎蚝蠹嫒莸年P(guān)系。但是,Scala可以做到。

第二,對(duì)基本類型(primitive types)的支持。上面給出的兩行代碼已經(jīng)顯示出基本類型可以被當(dāng)做類型參數(shù)(type parameters)來(lái)使用。

第三,聲明地點(diǎn)可變性(declaration site variance)。對(duì)于類型協(xié)變量(types covariant)以及逆變量(contravariant)聲明的支持,將極大的改進(jìn)絕大多數(shù)庫(kù)的一致性。

第四,對(duì)于上下邊界的支持(lower bound & upper bound),以及將多個(gè)上邊界(multiple upper bonds)做為復(fù)合類型(compound type)模式的支持。

我相信,具體化(reification)的缺乏可以通過(guò)manifests類來(lái)充分解決。Manifests類型現(xiàn)在在Scala中還正在設(shè)計(jì)中。具體化經(jīng)常被描述成一切泛型問(wèn)題的萬(wàn)靈藥,但它不是。還有就是,擁有泛型的成功的語(yǔ)言中,比如Haskell,ML或OCaml中,都在使用泛型擦除模式(erasure),所以(Scala中)使用這個(gè)模式并非只是為了向Java妥協(xié)而設(shè)計(jì)。

有關(guān)Scala的泛型就先介紹到這里。51CTO在未來(lái)將繼續(xù)帶來(lái)新的有關(guān)Scala編程語(yǔ)言的各種新消息,介紹,教程,以及各種你想知道的關(guān)于Scala的內(nèi)容。對(duì)于Java開(kāi)發(fā)人員而言,Scala的學(xué)習(xí)曲線可以說(shuō)是微乎其微,而且潛力也相當(dāng)可觀。如果對(duì)Scala語(yǔ)言感興趣,歡迎繼續(xù)關(guān)注51CTO的Scala編程語(yǔ)言專題。

【51CTO.COM 獨(dú)家特稿,轉(zhuǎn)載請(qǐng)注明出處及作者!】

【相關(guān)閱讀】

  1. Scala的類型系統(tǒng):取代復(fù)雜的通配符
  2. Scala的類型系統(tǒng) 比Java更靈活
  3. Java程序員,你為什么要關(guān)注Scala
  4. Scala創(chuàng)始人:創(chuàng)造比Java更好的語(yǔ)言
  5. Java以外的選擇 Scala編程語(yǔ)言簡(jiǎn)介
責(zé)任編輯:yangsai 來(lái)源: 51CTO.com
相關(guān)推薦

2010-08-11 08:35:00

Scala 2.8Scala創(chuàng)始人Martin Oder

2009-05-20 09:41:10

2009-07-08 11:44:40

ScalaGroovyJVM

2009-09-09 14:11:58

Scala泛型

2020-02-21 08:18:58

JavaScala編程語(yǔ)言

2010-09-14 13:22:17

Scala編程指南Scala

2010-01-28 11:08:32

MariaDB

2010-04-06 18:19:00

51CTO技術(shù)周刊

2011-09-08 13:50:51

51cto 51CTO

2023-06-19 16:44:05

數(shù)字化

2011-09-08 13:26:27

51cto 51CTO

2016-06-16 17:34:59

html5高招

2010-12-10 13:21:47

51CTO博客大賽

2010-05-04 16:22:45

Unix系統(tǒng)

2018-04-04 09:55:51

區(qū)塊鏈 51CTO

2010-05-10 13:00:37

華為認(rèn)證

2013-04-08 10:38:00

2011-05-31 13:18:14

51CTO 熊平 新

2012-06-14 16:21:24

LinuxLinus Torva

2010-04-19 17:03:01

搜索谷歌
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)