给定一些路径依赖类型的值,我如何获得"容器"的实例?

Kev*_*ght 5 scala scala-2.8

它在代码中更容易解释:

class Bippy {
  val x = 42

  class Boppy {
    val y = "hello world"
  }

  val bop = new Boppy
}

val bip = new Bippy
val bop: Bippy#Boppy = bip.bop
Run Code Online (Sandbox Code Playgroud)

bop然后提供给另一个方法,该方法需要x从包含的实例中查找值Bippy.这样做有什么神奇的咒语?

该实例bop来自我无法控制的代码,因此添加新方法Boppy不是一个选项.

Jam*_*Iry 7

你不能.至少不是没有作弊.这是欺骗的方法.

def getOuter(bop : Bippy#Boppy) = 
   bop.asInstanceOf[{def Bippy$Boppy$$$outer() : Bippy}].Bippy$Boppy$$$outer()
Run Code Online (Sandbox Code Playgroud)

显然,这非常依赖于今天scalac如何工作的细节,并且无法保证它将在明天起作用.