如何在Scala中设置多个类型范围?


72

我希望能够声明如下内容:

trait Narrowable[A] extends Iterable[A] {

    def narrow[B <: A & B <: AnyRef] : Iterable[B]

}

对此,类型B应同时是A 的子类型AnyRef。这可能吗?

Answers:


110

使用化合物类型:

trait Narrowable[A] extends Iterable[A] {
  def narrow[B <: A with AnyRef] : Iterable[B]
}

1
同样的交易,挖金,多年之后,人们发现了Walter Chang的有见地的回复;-)
virtualeyes 2012年

8
@Walter Chang或/两个上限之一是 怎么回事def narrow[B <: A | B <: AnyRef] : Iterable[B]
Pushpendra Jaiswal

@PushpendraJaiswal最好的选择可能是简单地使用Either[A, AnyRef]而不是键入边界。
Brian McCutchon

1
如果您需要一个上限和一个上下文限制,该怎么办?
Thayne,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.