此代码:
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的实现的错误是什么?
答案 0 :(得分:4)
您传入的类型为n2
,n3
,n4
类型为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。