一个新的语法结构被提出,它简化了这种类——为另外一种类型提供扩展方法——的建立。 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 这篇比较短,有些话英文很好理解,但硬翻译成中文很别扭。