如何在Scala中导入没有路径依赖的内部类?

Rot*_*sor 5 scope scala inner-classes path-dependent-type

TL&DR:是否可以(本地?)禁用路径依赖类型?我想发出一个类似的单一import语句import x._,但要C引用X#C而不是x.C(X作为类型x)?

我有一堆类型:

class Button[M] { ... }
class Label[M] { ... }
...
Run Code Online (Sandbox Code Playgroud)

我碰巧使用它们将相同类型的参数传递给所有这些:

class UseSite[M] (
   btn1 : Button[M]
 , btn2 : Button[M]
 , lbl1 : Label[M]) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

我认为包装所有这些类型是很好的,所以我只需要传递一次类型参数:

class Swing[M] {
  class Button { ... }
  class Label { ...}
}
Run Code Online (Sandbox Code Playgroud)

然后在使用网站上我希望能够这样做:

class WithSwing[M] {
  val swing = new Swing[M]
  import swing._
  class UseSite(
     btn1 : Button
   , btn2 : Button
   , lbl1 : Label) {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,由于路径依赖类型,这不能正常工作:Button引用swing.Button而不是Swing[M]#Button外部代码很难将正确的参数传递给UseSite构造函数.

是否有一个很好的方式来Button参考Swing[M]#Button而不是swing.Button

Kip*_*ros 3

人们可能会想象类似的事情

import Swing[M]#_
Run Code Online (Sandbox Code Playgroud)

将 type 的所有类型成员Swing[M]带入作用域,但这不存在(import需要一个值,而不是类型)。出于实际目的,如何使用类型别名来减少样板文件,

type S = Swing[M]
val b: S#Button = ... // Shorter than Swing[M]#Button
Run Code Online (Sandbox Code Playgroud)