是否可以将类型参数的类型参数传播到Scala中的参数化类?

时间:2016-08-02 16:09:51

标签: scala types typeclass

假设我有一个特征Foo[A, B]

我想定义一个类Bar,使用Foo进行参数化,并在Foo方法中重用Bar类型参数。如下所示的内容(此代码段不会编译):

trait Bar[Foo[A, B]] {
  def doSmth[C](A => C): C
}

有没有办法实现类似的东西,并且在Bar声明中只有一个类型参数?

P.S。如果有人能为所描述的内容提出正确的术语,那也很棒。

2 个答案:

答案 0 :(得分:1)

不确定,但也许这就在你想去的地方附近。

trait Foo[A,B]
trait Bar[A] { self: Foo[A,_] =>
  def doSmth[C](atoc: A => C): C
}

或者,使用类型别名。

trait Foo[A,B] {type FooA = A}
trait Bar { self: Foo[_,_] =>
  def doSmth[C](atoc: FooA => C): C
}

这意味着如果您有Foo,则需要Bar

答案 1 :(得分:1)

您可以使用#运算符来访问类或特征的类型成员。

find . -name \*.xml | xargs -d '\n' egrep '(pattern one|pattern two)'