【发布时间】:2020-01-04 15:50:50
【问题描述】:
给定以下类:
abstract class Foo[B]
abstract class Baz[B, F <: Foo[B]] {
def get(foo: F): B
// other methods
}
我讨厌在Baz 中需要两个类型参数,而第一个是多余的。我想写这样的东西:
abstract class Baz[F <: Foo[B]] {
def get(foo: F): B
}
我是否可以在 Baz 中引用 B 类型(F 的)而不使用多个类型参数?这感觉应该是可能的,但我似乎无法弄清楚语法。
【问题讨论】:
-
不确定我是否理解这个问题。如果
F是上下文绑定到Foo,这意味着隐式Foo[F]必须在范围内,可以通过implicitly [Foo[F]]访问。 -
我似乎无法暗中工作。我已经更新了我的例子,希望能更清楚。
-
您确定要上下文边界吗?你能分享一个更真实的例子来解释你的最终目标吗?
-
我正在制作一个游戏框架。我提供了一个抽象游戏和一个抽象玩家。游戏是绑定到特定类型玩家的上下文。我有对游戏及其播放器进行操作的函数,但我不想采用多个类型参数
-
@NathanMerrill 为什么需要传递两个类型参数?类型推断应该有帮助吗?您如何使用这些类,为什么它们是抽象的。你控制这两个班级吗?您是否考虑过使用 type members 而不是 type parameters?也许这些应该是typeclasses? - 没有更多上下文和真实示例很难提供解决方法。 - 但正如 jwvh 所说,在一般情况下,您必须传递两个类型参数。