【问题标题】:Scala Existential Types for Multi Parameter F-Bounded Polymorphic Types多参数 F 有界多态类型的 Scala 存在类型
【发布时间】:2018-05-20 19:00:32
【问题描述】:

我正在使用一个类的库,该类的定义如下所示:

abstract class ParentClass[X, Y <: ParentClass[X, Y, M], M <: OtherClass[X, M]]

这个类有子类,像这样扩展这个类:

abstract class ChildClass[B, C <: ChildClass[B, C, D], D <: OtherChildClass[B, D]] extends ParentClass[B, C, D]

并且该子类具有以这种方式扩展它的子类:

class SomeClass extends ChildClass[F, SomeClass, SomeOtherClass]

我将如何处理ParentClass 的泛型?例如,如果我想创建共享相同祖先类型ParentClass 的对象的Array,我可以这样做:

getArrayOfParentClass(): Array[ParentClass[_, _, _]]

但这不尊重类定义中提出的类型界限。
似乎存在类型是 F-Bounded Polymorphic 类型的主要解决方案之一,但我似乎无法找到使用存在类型来处理这种情况的解决方案,我也没有看到任何关于类的存在类型的示例具有超过 1 个类型参数。我想它会像这样工作,但还没有完全弄清楚:

// Doesn't compile
getArrayOfParentClass(): Array[X forSome {type X <: ParentClass[A, X, M forSome {type M <: OtherClass[A, M]}]

【问题讨论】:

    标签: scala types polymorphism type-parameter existential-type


    【解决方案1】:

    你想要的语法是

    Array[X forSome { type X <: ParentClass[A, X, M]; type M <: OtherClass[A, M] }]
    

    【讨论】:

      猜你喜欢
      • 2016-09-22
      • 2015-09-14
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 1970-01-01
      • 2015-06-03
      • 1970-01-01
      相关资源
      最近更新 更多