添加List作为参数时编译错误

时间:2014-08-20 08:55:56

标签: scala

此代码:

package neuralnetwork

object hopfield {
  println("Welcome to the Scala worksheet")

  object Neuron {
    def apply() = new Neuron(0, 0, false, Nil, "")
    def apply(l : List[Neuron]) = new Neuron(0, 0, false, l, "")
  }

  case class Neuron(w: Double, tH: Double, var fired: Boolean, in: List[Neuron], id: String)

  val n2 = Neuron
  val n3 = Neuron
  val n4 = Neuron
  val l = List(n2,n3,n4)
  val n1 = Neuron(l)



}

导致编译错误:

type mismatch; found : List[neuralnetwork.hopfield.Neuron.type] required: List[neuralnetwork.hopfield.Neuron]

行:val n1 = Neuron(l)

为什么会发生这种情况?有关阻止添加List的实现的错误是什么?

1 个答案:

答案 0 :(得分:4)

您传入的类型为n2n3n4类型为Neuron.type,请尝试添加括号:

val n2 = Neuron()
val n3 = Neuron()
val n4 = Neuron()
val l = List(n2,n3,n4)
val n1 = Neuron(l)

不同之处在于,您使用括号实际获得Neuron类(您调用apply方法),类型将为Neuron而不是Neuron.type

编辑:

.type表示法称为单例类型,它只表示类所代表的对象,在这种情况下Neuron.type只返回该单例对象,更多信息在第9页的this paper by Odersky about the scala overview