相关疑难解决方法(0)

强制类型差异

在Scala中,我可以在编译时强制执行类型相等.例如:

case class Foo[A,B]( a: A, b: B )( implicit ev: A =:= B )

scala> Foo( 1, 2 )
res3: Foo[Int,Int] = Foo(1,2)

scala> Foo( 1, "2" )
<console>:10: error: Cannot prove that Int =:= java.lang.String.
Run Code Online (Sandbox Code Playgroud)

有没有办法强制执行类型A和类型B应该是不同的?

types scala

57
推荐指数
5
解决办法
4899
查看次数

在 Scala 中,如何定义不包含已定义类的类型上限?

给定一个具体的类Animal,如何定义一个只接受其子类的函数Animal

在这样的典型示例中,这Animal是一个特征,因此定义[A <: Animal]意味着您已经传递了 的子类Animal。但是,在像下面这样的场景中,哪里Animal是具体的,我可以将其排除为允许的类型吗?

我正在使用现有的生成代码,这只是问题的一般示例。因此,这意味着我无法将Animal(或等效物)制作成trait.

请参阅下面的示例:

class Animal {
  def name: String = "General Animal"
}

class Dog extends Animal {
  override def name: String = "Dog"
}

// How do I limit A to be a subtype of Animal (excluding Animal itself)?
class SpecificAnimalContainer[A <: Animal](a: A) {
  def specificAnimal: A = a
}

val dogContainer = new SpecificAnimalContainer[Dog](new Dog)

// I …
Run Code Online (Sandbox Code Playgroud)

types scala

3
推荐指数
1
解决办法
601
查看次数

标签 统计

scala ×2

types ×2