小编Roy*_*man的帖子

什么是Scala中的头等舱模块?

当说scala通过对象语法提供一流的模块支持时,这是什么意思?词汇表中没有任何内容甚至提到这句话,但我现在已经遇到过两次并且无法破译它.在这篇关于适配器的博客文章中有人说过.

scala

10
推荐指数
1
解决办法
3507
查看次数

Scala Quasiquote提升

Quasiquotes的Scala文档在解释提升时提到了这一点:

也可以结合提升和非提示拼接:

 scala> val ints = List(1, 2, 3)
 scala> val f123 = q"f(..$ints)"
 f123: universe.Tree = f(1, 2, 3)

 scala> val intss = List(List(1, 2, 3), List(4, 5), List(6))
 scala> val f123456 = q"f(...$intss)"
 f123456: universe.Tree = f(1, 2, 3)(4, 5)(6)
Run Code Online (Sandbox Code Playgroud)

具体是代码示例中的提升与非引用拼接的实现?

scala scala-quasiquotes

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

为什么输入参数在方法中是逆变的?

这是教程的一些代码:

case class ListNode[+T](h: T, t: ListNode[T]) {
  def head: T = h
  def tail: ListNode[T] = t
  def prepend(elem: T): ListNode[T] =
    ListNode(elem, this)
}
Run Code Online (Sandbox Code Playgroud)

教程说:

不幸的是,这个程序不能编译,因为只有在变量位置使用类型变量时才能进行协方差注释.由于类型变量T作为方法前置的参数类型出现,因此该规则被破坏.

如何T处于协变位置predend,其他T参考(def head: T = hdef tail: ListNode[T] = t)显然是协变的?

什么我问的是,为什么Tprepend不协变.这当然不包括在为什么函数[-A1,...,+ B]没有关于允许任何超类型作为参数?,这似乎是其他人指导我阅读的内容.

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

什么是Scala中的访问器和增变器方法?

这些显然是在scala中为构造函数中的任何参数自动生成的(我想这也暗示它们可以在其他地方手动添加)但这些东西是什么?

scala

2
推荐指数
1
解决办法
1797
查看次数

X>中null的目的是什么:Null <:Y?

例如:

abstract type
ClassSymbol >: Null <: Universe.TypeSymbol with Universe.ClassSymbolApi
Run Code Online (Sandbox Code Playgroud)

这是在这里找到的.我意识到这有什么描述,但从语法的角度来看,我无法理解它.

Null的目的是什么?看起来它可能是某种默认值,但我只是猜测,因为我只看到这种类型的语法,并且我认为null可以是类型的返回,而不会破坏程序.这是一个抽象类型,但它没有您稍后可以指定的参数,那么它如何作为抽象类型工作?

scala

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

可以在特征上使用'new'关键字吗?

例如: implicit val IntOrd = new Ord [Int ] {...}

如果Ord是特质,此代码是否合法?我在有关OO类和类型类之间差异的文档中看到了这一点。

scala

0
推荐指数
1
解决办法
104
查看次数

标签 统计

scala ×5

scala-quasiquotes ×1