我有这样的Scala代码:斯卡拉:为什么必须使用高清仿制的,而不是VAR
trait Monoid[A] {
def op(a1: A, a2: A): A
def zero: A
}
val stringMonoid = new Monoid[String] {
override def op(a1: String, a2: String): String = a1 + a2
override def zero: String = ""
}
def listMonoid[A] = new Monoid[List[A]] {
override def op(a1: List[A], a2: List[A]): List[A] = a1 ++ a2
override def zero: List[A] = Nil
}
我的问题是,如果我从def
在这种情况下更改为val
,斯卡拉不会编译:
var listMonoid[A] = new Monoid[List[A]] {
override def op(a1: List[A], a2: List[A]): List[A] = a1 ++ a2
override def zero: List[A] = Nil
}
请为我解释这个。
“val”用于常量值,“var”用于可变变量,“def”用于声明函数。 –
在你的第二个例子中,你说过你使用'val',但我只看到一个'var'。 – Carcigenicate
其他问题和答案对泛型没有提及,但是在这里被问到。 –