给出以下对象:
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] {
^
关于这里发生的事情的任何想法(/解决方法)?
Update 对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
2 回答
我看到问题是由于我使用 Spark REPL
spark-shell
. 这个问题在正常的Scala REPL中没有发生 .好消息:您的代码有效!坏消息:我不知道为什么它不适合你 .
这是我的REPL Session ;我打算 Build 你的榜样,看看发生了什么,但没有做到 .
嗯 . 琐碎的例子有效 .
当它有一个身体时工作 .
Aaaaand在扩展多态特征并覆盖其中一个成员时起作用 . 唯一可能不同的是你对
P2pReq
的定义,但是我没有看到这可能导致你的一个类型被解释器无法识别 .