自动`列出对象中定义的变量(scala)

时间:2015-09-19 03:58:46

标签: scala

考虑以下计划。有一堆类型定义,一个特征,以及一个扩展这个特征的对象。

这是我程序的一个非常简化的版本。类型定义和特征在程序内部,用户应该填写对象内的细节:

/* ---------------------------------------------------*/      
/** the internal program */ 
case class Type1()
case class Type2()
case class Type3()

trait aTrait {
   // some stuff here 
}
/* ---------------------------------------------------*/ 
/** user side */ 
object samepleObject extends aTrait {
  val object1 = new Type1()
  val object2 = new Type1()
  val object3 = new Type2()
  val object4 = new Type3()

  // list of all objects here
  // this definition should be populated automatically. 
  val all = List(object1, object2, object3, object4)
}

用户应该定义一组变量(可能是不同类型)。变量all是用户定义的所有变量的List。问题是可以自动定义和填充此变量(可能在aTrait特征内)?

1 个答案:

答案 0 :(得分:3)

这让我想起了Enums。我认为你只能在你的对象或aTrait中实现具有可变状态的东西。这也意味着handlinf线程安全。

您可以执行类似

的操作
/* ---------------------------------------------------*/
/** the internal program */
case class Type1()
case class Type2()
case class Type3()

import scala.collection.mutable

trait aTrait {
 private[this] var registry = mutable.ListBuffer.empty[Value[_]]

  case class Value[T](value: T) {
    registry.synchronized { registry :+= this }
  }

  def all: List[Value[_]] = registry.toList
}
/* ---------------------------------------------------*/
/** user side */
object sampleObject extends aTrait {
  val object1 = Value(new Type1())
  val object2 = Value(new Type1())
  val object3 = Value(new Type2())
  val object4 = Value(new Type3())
}

val test = sampleObject.all

> test: List[sampleObject.Value[_]] = List(Value(Type1()), Value(Type1()), Value(Type2()), Value(Type3()))

但是,我不保证并发无问题