小编Jul*_*gaz的帖子

为什么BitSet需要将显式强制转换视为Set [Int]的实例?

在scaladoc中,BitSet被定义为扩展Set[Int].所以我认为BitSet在实例中使用as Set[Int]会工作,但我得到一个类型不匹配:

Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_29).

scala> import collection.BitSet
import collection.BitSet

scala> val b: Set[Int] = BitSet()
<console>:8: error: type mismatch;
 found   : scala.collection.BitSet
 required: Set[Int]
       val b: Set[Int] = BitSet()
                               ^
Run Code Online (Sandbox Code Playgroud)

然而演员工作:

scala> val b: Set[Int] = BitSet().asInstanceOf[Set[Int]]
b: Set[Int] = BitSet()
Run Code Online (Sandbox Code Playgroud)

那么为什么我需要明确地演绎BitSet一段Set[Int]时间Set[Int]才是超级型Set[Int]

scala scala-collections

6
推荐指数
1
解决办法
277
查看次数

如何使用具有未绑定类型参数的成员定义案例类?

给定带有绑定类型参数的类定义,Animal[A <: String]似乎Scala编译器不会推断B <: StringAnimal[B].是否允许推理?如何帮助编译器进行推理?

下面是一个案例类的具体示例,其中缺少此推断是一个问题.

考虑以下案例类层次结构:

sealed trait Person[+T <: Person[T]]
case class Student() extends Person[Student]
case class Professor() extends Person[Professor]
Run Code Online (Sandbox Code Playgroud)

我需要定义一个case类University,我可以用类型的变量实例化Person[_],例如val p: Person[_] = Student().我认为这可以使用以下定义:

case class University(p: Person[_])
Run Code Online (Sandbox Code Playgroud)

但这无法编译错误:

type arguments [Any] do not conform to trait Person's type parameter bounds [+T <: Person[T]]
Run Code Online (Sandbox Code Playgroud)

如果我绑定University它编译的case类的类型参数(如果我删除case关键字,它也会使用无界参数编译,但在我的情况下这不是一个选项):

case class BoundUniversity[P <: Person[P]](p: Person[P])
Run Code Online (Sandbox Code Playgroud)

但是这个参数化版本无法使用类型的无界变量进行实例化Person[_]:

val p: Person[_] = Student()
BoundUniversity(p)
Run Code Online (Sandbox Code Playgroud)

编译失败: …

generics scala type-inference case-class

6
推荐指数
1
解决办法
1228
查看次数

为什么在Scala中区分方法和函数?

我一直在阅读Scala中的方法和函数.吉姆的帖子和丹尼尔的补充很好地解释了这些之间的差异.这是我带给我的东西:

  • 函数是对象,方法不是;
  • 因此,函数可以作为参数传递,但方法不能;
  • 方法可以是类型参数化,函数不能;
  • 方法更快.

我也明白之间的差别def,valvar.

现在我实际上有两个问题:

  1. 为什么我们不能参数化函数的apply方法来参数化函数?和
  2. 为什么函数对象不能调用该方法才能更快地运行?或者函数的调用者直接调用原始方法?

期待您的回答,并提前多多感谢!

scala

4
推荐指数
1
解决办法
614
查看次数