【发布时间】:2016-05-13 21:06:08
【问题描述】:
给定以下对象:
scala> object P2pClient {
| type Num = Double
| type Weights = Array[Array[Num]]
| }
defined object P2pClient
以及以下导入:
import P2pClient._
Weights 类型 似乎 可以正确理解:
val w: Weights = new Weights(3)
w: P2pClient.Weights = Array(null, null, null)
但是为什么它不在以下构造中工作:
case class SendWeightsReq(W: Weights) extends P2pReq[Weights] {
| override def value() = W
| }
<console>:12: error: not found: type Weights
case class SendWeightsReq(W: Weights) extends P2pReq[Weights] {
^
<console>:12: error: not found: type Weights
case class SendWeightsReq(W: Weights) extends P2pReq[Weights] {
^
对这里发生的事情有什么想法(/workaround)?
更新 REPL 中的通配符导入似乎有很大的限制。这是另一个更简单的例子:
scala> import reflect.runtime.universe._
import reflect.runtime.universe._
scala> trait TT { def x[T <: java.io.Serializable : TypeTag]: T }
<console>:10: error: not found: type TypeTag
trait TT { def x[T <: java.io.Serializable : TypeTag]: T }
^
所以我们看到通配符导入没有起作用。这是显式包的相同代码:
scala> trait TT { def x[T <: java.io.Serializable : reflect.runtime.universe.TypeTag]: T }
defined trait TT
【问题讨论】:
-
使用尾随
// show打印编译的内容,包括导入。注意斜线和显示之间的空格。 -
@som-snytt 遇到了麻烦。正如您提到的,我将
// show放在上面的代码之后。当执行:paste然后ctrl-D时,REPL 会自动放置:quit- 终止会话。
标签: scala read-eval-print-loop