列出所有可见的含义

时间:2013-12-21 18:13:04

标签: scala reflection scala-macros

如果可能的话,如何使用反射和宏列出所有可见的含义?我需要这个能够分析可用的类型类实例。

用例

case class Artist (name: String, genres: Set[Genre])
case class Genre (name: String)

object CatalogueDB extends MySQL {
  implicit val artistEntity = new Entity[Artist] {...}
  implicit val genreEntity = new Entity[Genre] {...}
}

trait MySQL {
  // Typeclasses let me restrict methods on `MySQL` to work only for types, 
  // which are associated with its instance.
  // E.g., the following method will only compile when either an `Artist` or
  // a `Genre` is passed to it when called on `CatalogueDB`:
  def save[e : Entity](e : e) ...
  // But also I need to be able to get a list of those types and 
  // instances of `Entity` typeclass to get the information
  // needed to generate the database schema and 
  // to perform other tasks like that.
  // So, the following method should somehow be able to have
  // the `Entity` instances for `Artist` and `Genre` at its disposal,
  // when called on `CatalogueDB`.
  def generateSchema ...
}

1 个答案:

答案 0 :(得分:1)

我认为现在没有办法做到这一点。但是,列出给定类的所有成员并检查它们是否是隐式的应该相对容易 - 无论是在编译时还是在运行时。