this: Enumeration =>
yangzhan
2009-12-17
下面这段代码中:
this: Enumeration => 这句有什么作用呢? trait Enumv { this: Enumeration => private var nameDescriptionMap = scala.collection.mutable.Map[String, String]() /* store a name and description for forms */ def Value(name: String, desc: String) : Value = { nameDescriptionMap += (name -> desc) new Val(name) } /* get description if it exists else name */ def getDescriptionOrName(ev: this.Value) = { try { nameDescriptionMap(""+ev) } catch { case e: NoSuchElementException => ev.toString } } /* get name description pair list for forms */ def getNameDescriptionList = this.elements.toList.map(v => (v.toString, getDescriptionOrName(v) ) ).toList } |
|
fineqtbull
2009-12-17
第一次看到this: Enumeration => 这种用法,调查了一下大概知道它的用法了。this : T =>是Scala中self type的定义,也就是说由于Enumv中包含了this: Enumeration =>定义,所以实现Enumv的最终类必须也要具有Enumeration类的接口(比如继承),这样在Enumv中就可以使用Enumeration的方法或属性了。
以Enumv举例来说,可以这样定义和使用混入了Enumv特征的单例 scala> object Enum1 extends Enumeration with Enumv { | this : Enumeration => | val Value1, Value2 = Value | } defined module Enum1 scala> Enum1.Value1 res1: Enum1.Value = Enum1(0) 另外根据下面链接的内容,selftype似乎为了解决循环继承而发明的。 http://old.nabble.com/-scala--Selftype-example-td11384485.html#a11384485 |
|
night_stalker
2009-12-18
貌似很早之前写过一个关于它的 note …… explicit 什么什么的 ……
除了约束 this 的类型以外,还有一个作用是省去一些手工转换类型的功夫: 如果代码中有不少 this.asInstanceOf[XX],不妨考虑添上 this:XX => |