一個新的語法結構被提出,它簡化了這種類——爲另外一種類型提供擴展方法——的建立。 html
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)
LocalModifier ::= ‘implicit’ BlockStat ::= {LocalModifier} TmplDef TmplDef ::= [‘case’] ‘class’ ClassDef
語言規範SLS 7.1修改爲容許在class上使用implicit修飾符。隱式類中新的部分,用來描述這種結構的行爲。 scala
新的語法不能破壞現有的代碼,因此保持源代碼兼容現有的技術。 翻譯
2013-1-25 這篇比較短,有些話英文很好理解,但硬翻譯成中文很彆扭。