Scala模式匹配区分路径依赖类型取决于定义的范围实例?

时间:2015-01-21 17:31:52

标签: scala pattern-matching path-dependent-type

更新:在repl中运行的简化代码

我想使用扩展公共标记特征的路径依赖类型创建特定于域的事件,如Created,Updated,Deleted等,以便域可以(a)发送彼此的事件和(b)按域进行模式匹配:

trait Event

trait Domain {
  case class Created(name: String) extends Event
}

// declare three instances of Domain trait, one here and two 
// in an inner scope

object DomainC extends Domain

{
   object DomainA extends Domain
   object DomainB extends Domain

   def lookingForAs(event: Event): Unit = {
      println(s"${event.getClass}")
      event match {
        case DomainB.Created(_) => println("Oops matched a B")
        case DomainC.Created(_) => println("Oops matched a C")
        case DomainA.Created(_) => println("Found my A")
      }
   }

   lookingForAs(DomainA.Created("I am an A"))
}

结果是"哎呀匹配C"

lookingForAs功能

  • 正确与DomainA.Created与DomainB.Created的实例不匹配
  • 错误将DomainA.Created的实例与DomainC.Created
  • 匹配

Scala 2.10.2,2.10.3,2.10.4和2.11.5的REPL中的结果相同

1 个答案:

答案 0 :(得分:0)

来自scala-users的答案Google Group:Jason Zaugg(反语)说这是一个Scala错误并创建了SI-9110来跟踪它以获得针对2.12的修复程序。再次感谢,杰森