Scala中的类型相等

Scala中的类型相等,scala,Scala,下面是一段代码: class Foo[A] { def foo[B](param: SomeClass[B]) { // } } 现在,在foo中,我该如何: 1) 验证B是否与A的类型相同? 2) 验证B是否是a的子类型?您需要隐式类型证据, 1) 验证B是否与A的类型相同 2) 验证B是否为a的子类型 在这里,如果没有通用类型约束,则无法强制执行类型约束。作为旁注,通用类型约束实际上是不必要的: class Foo[A] { def foo_subParam[B <:

下面是一段代码:

class Foo[A] {
  def foo[B](param: SomeClass[B]) {
  //
  }
}
现在,在
foo
中,我该如何:
1) 验证B是否与A的类型相同?

2) 验证B是否是a的子类型?

您需要隐式类型证据,

1) 验证B是否与A的类型相同

2) 验证B是否为a的子类型


在这里,如果没有通用类型约束,则无法强制执行类型约束。

作为旁注,通用类型约束实际上是不必要的:

class Foo[A] {
  def foo_subParam[B <: A](param: SomeClass[B]) {...}
  def foo_supParam[B >: A](param: SomeClass[B]) {...}
  def foo_eqParam[B >: A <: A](param: SomeClass[B]) {...}
  def foo_subMyType[Dummy >: MyType <: A] {...}
  def foo_supMyType[Dummy >: A <: MyType] {...}
  def foo_eqMyType[Dummy1 >: MyType <: A, Dummy2 >: A <: MyType] {...}
}
Foo类[A]{
def foo_子参数[B:A](参数:SomeClass[B]){…}

def foo_eqParam[B>:A:MyType:A:MyType:A如果A和B是我定义的类,我必须自己实现这些隐式吗?@Sergey不,只需附加一个额外的(隐式ev:B Hi@Ptharien's Flame,我刚刚看到了你的答案,看起来很有趣。你能解释一下吗?MyType是从哪里来的?你是如何使用foo_eqMyType方法的?提前谢谢你的回答。@FrancisToth这只是一个占位符名称。我可以使用
Bar
Baz
只是同样容易。在示例中,
MyType
意味着某个类型不是类型参数,而是来自其他地方。至于方法的用法,您只需调用它!类型推断和类型检查将自动处理其余部分。
class Foo[A] {
  def foo[B <: A](param: SomeClass[B]) = ???
}

// or

class Foo[A] {
  def foo[B](param: SomeClass[B])(implicit ev: B <:< A) = ???
}
class Foo[A] {
  def regularMethod = ???
  def stringSpecificMethod(implicit ev: A =:= String) = ???
}
class Foo[A] {
  def foo_subParam[B <: A](param: SomeClass[B]) {...}
  def foo_supParam[B >: A](param: SomeClass[B]) {...}
  def foo_eqParam[B >: A <: A](param: SomeClass[B]) {...}
  def foo_subMyType[Dummy >: MyType <: A] {...}
  def foo_supMyType[Dummy >: A <: MyType] {...}
  def foo_eqMyType[Dummy1 >: MyType <: A, Dummy2 >: A <: MyType] {...}
}