Essential Scala: Literals

Scala對(duì)象系統(tǒng)

Scala對(duì)象系統(tǒng)

總體上,Scala對(duì)象系統(tǒng)可分為兩類:

  • 引用類型
  • 值類型

引用類型

  • AnyRef的子類
  • 使用new構(gòu)造對(duì)象
  • 當(dāng)存在默認(rèn)構(gòu)造函數(shù)狞谱,可以略去括號(hào)
  • AnyRef等價(jià)于java.lang.Object
  • 可以將null賦值給Reference Type

值類型

  • AnyVal的子類
  • Char, Byte, Short, Int, Long, Float, Double, Unit, Boolean
  • 不能使用new構(gòu)造實(shí)例庆猫,而使用Literal Values構(gòu)造實(shí)例
  • 編譯器將其映射為Java原生類型泌辫,以便提升性能
  • 不能將null賦值給Int的變量

Int為例巩步,Int的定義應(yīng)該類似于:

final abstract class Int private extends AnyVal
  • final表示不能被子類化
  • abstract表示不能被實(shí)例化
  • private表示主構(gòu)造函數(shù)私有化虱饿,進(jìn)一步保證不能被實(shí)例化
  • extends AnyVal表示只能使用字面值構(gòu)造實(shí)例

數(shù)值

歸功于Scala良好的可擴(kuò)展性哩俭,數(shù)值文字可以表現(xiàn)得像普通對(duì)象一樣绷跑。

1 to 10    

事實(shí)上,Int并不存在to方法凡资,Predef定義了一個(gè)IntRichInt的隱式轉(zhuǎn)換砸捏,從而提供更豐富的操作數(shù)值的方法。

object Predef {
  implicit def intWrapper(x: Int) = new runtime.RichInt(x)
}
package scala.runtime

class RichInt(val self: Int) extends AnyVal {
  ......
  def to(end: Int): Range.Inclusive = Range.inclusive(self, end)
}

字符串

"+9519760513".exists(_.isDigit)

java.lang.String并不存在exists方法隙赁,Predef定義了一個(gè)隱式轉(zhuǎn)換垦藏,使String可以隱式地轉(zhuǎn)換為StringOps,從而提供更豐富的操作字符串的方法伞访。

object Predef {
  implicit def augmentString(x: String): StringOps = new StringOps(x)
}

Unit

Unit類型在JVM中對(duì)應(yīng)于Javavoid掂骏。

final abstract class Unit private extends AnyVal

()是其唯一的實(shí)例。

classOf[Unit] // Class[Unit] = void
().getClass // Class[Unit] = void

classTag[Unit] // scala.reflect.ClassTag[Unit] = Unit
classTag[Unit].runtimeClass // Class[_] = void

Null

Null是所有AnyRef的子類型厚掷,存在唯一的實(shí)例null芭挽。不能將null賦予Value Types

val num: Int = null  // Error

符號(hào)

'1th
'2th

如果符號(hào)中有空格蝗肪,可以是使用Symbol::apply直接構(gòu)造

Symbol("Programming Scala")

元組

(1, "two")等價(jià)于Tuple2(1, "twp")袜爪,或者Tuple2[Int, String](1, "two")

val t1 = (1, "two")
val t1: (Int,String) = (1, "two")
val t2: Tuple2[Int,String] = (1, "two")

函數(shù)值

(i: Int, s: String) => s+i是類型為Function2[Int, String, String]的一個(gè)字面值薛闪。

字面值的類型定義常常用于類型聲明:

val f1: (Int, String) => String = (i, s) => s + i
val f2 = (i: Int, s: String) => s + i
val f3: Function2[Int, String, String] = (i, s) => s+ i

自定義

歸功于Scala良好的可擴(kuò)展性辛馆,Scala可方便地實(shí)現(xiàn)文字的自定義。

Map元組
val capital = Map("US" -> "Washington", "France" -> "Paris")

"US" -> "Washington"構(gòu)造了一個(gè)類型為Tuple2[String, String]的二元組:("US", "Washington")豁延。

package scala

object Predef {
  implicit final class ArrowAssoc[A](self: A) extends AnyVal {
    def ->[B](y: B) = (self, y)
  }
}
正則表達(dá)式
val regex = "([0-9]+) ([a-z]+)".r
字符串內(nèi)插
println(s"$name is $age years old.")

s其本質(zhì)僅僅是一個(gè)函數(shù)而已昙篙。

package scala

case class StringContext {
   def s(args: Any*): String = ??? 
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市诱咏,隨后出現(xiàn)的幾起案子苔可,更是在濱河造成了極大的恐慌,老刑警劉巖袋狞,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件焚辅,死亡現(xiàn)場離奇詭異映屋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)同蜻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門棚点,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人湾蔓,你說我怎么就攤上這事瘫析。” “怎么了默责?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵贬循,是天一觀的道長。 經(jīng)常有香客問我桃序,道長杖虾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任葡缰,我火速辦了婚禮,結(jié)果婚禮上忱反,老公的妹妹穿的比我還像新娘泛释。我一直安慰自己,他們只是感情好温算,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布怜校。 她就那樣靜靜地躺著,像睡著了一般注竿。 火紅的嫁衣襯著肌膚如雪茄茁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天巩割,我揣著相機(jī)與錄音裙顽,去河邊找鬼。 笑死宣谈,一個(gè)胖子當(dāng)著我的面吹牛愈犹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播闻丑,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼漩怎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嗦嗡?” 一聲冷哼從身側(cè)響起勋锤,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎侥祭,沒想到半個(gè)月后叁执,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茄厘,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年徒恋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蚕断。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡入挣,死狀恐怖亿乳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情径筏,我是刑警寧澤葛假,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站滋恬,受9級(jí)特大地震影響聊训,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜恢氯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一带斑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧勋拟,春花似錦勋磕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至啸胧,卻和暖如春赶站,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背纺念。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國打工贝椿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人陷谱。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓团秽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親叭首。 傳聞我的和親對(duì)象是個(gè)殘疾皇子习勤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容