Scala2.10新特性之 Implicit classes

Implicit classes

隱式類

http://docs.scala-lang.org/sips/pending/implicit-classes.html

摘要

一個新的語法結構被提出,它簡化了這種類——爲另外一種類型提供擴展方法——的建立。 html

描述

implicit關鍵字如今容許做爲類的註解來使用。若是一個類帶有implicit關鍵字註解,那麼它就是一個隱式類。
隱式類必須有一個(第一個參數列表中只有一個參數的)主構造器。它也能夠包含額外的隱式參數列表。隱式類只能定義在容許定義方法的地方(不能在頂級)。隱式類是一個類與隱式方法配對的語法糖,隱式方法模擬類構造器。
生成的隱式方法與隱式類同名。這樣容許用類名來導入隱式轉換(後半句沒看懂)(This allows importing the implicit conversion using the name of the class, as one expects from other implicit definitions)。例如,以下形式的定義:
implicit class RichInt(n: Int) extends Ordered[Int] {
    def min(m: Int): Int = if (n <= m) n else m
    ...
}
會被編譯器轉換成:
class RichInt(n: Int) extends Ordered[Int] {
    def min(m: Int): Int = if (n <= m) n else m
    ...
}
implicit final def RichInt(n: Int): RichInt = new RichInt(n)
隱式類上的註解,會默認附加到生成的類和方法上。例如:
@bar
implicit class Foo(n: Int)
會變成:
@bar implicit def Foo(n: Int): Foo = new Foo(n)
@bar class Foo(n:Int)
annotation.target註解被擴展成包含genClass和method註解。它用於規定給隱式類生成的類添加註解,仍是給生成的方法添加註解。例如:
@(bar @genClass) implicit class Foo(n: Int)
會變成:
implicit def Foo(n: Int): Foo = new Foo(n)
@bar class Foo(n: Int)

規範

不須要改變Scala的語法規範,相關的生產規則已經容許隱式類。
LocalModifier ::= ‘implicit’
BlockStat ::= {LocalModifier} TmplDef
TmplDef ::= [‘case’] ‘class’ ClassDef

語言規範SLS 7.1修改爲容許在class上使用implicit修飾符。隱式類中新的部分,用來描述這種結構的行爲。 scala

影響

新的語法不能破壞現有的代碼,因此保持源代碼兼容現有的技術。 翻譯

2013-1-25 這篇比較短,有些話英文很好理解,但硬翻譯成中文很彆扭。
相關文章
相關標籤/搜索