Man*_*raf 8 scala scala-collections
我正在Scala中进行训练并获得此val重新分配错误.我没有看到我将一个新值重新分配给val
class personTest
{
val alf = Person("Alf", 30, List(EmailAddress("alf.kristian@gmail.com")))
val fredrik = Person("Fredrik", 33, List(EmailAddress("fredrik@vraalsen.no"), EmailAddress("fvr@knowit.no")))
val johannes = Person("Johannes", 0, Nil)
val persons = List(alf, fredrik, johannes)
@Test
def testNameToEmailAddress
{
// Create a map from each persons name to their e-mail addresses,
// filtering out persons without e-mail addresses
// Hint: First filter list, then use foldLeft to accumulate...
val emptyMap: Map[String, List[EmailAddress]] = Map()
val nameToEmail = persons.filter(_.emailAddresses.length>0).foldLeft(emptyMap)((b,p)=> b+=p.name->p.emailAddresses)
assertEquals(Map(alf.name -> alf.emailAddresses, fredrik.name -> fredrik.emailAddresses), nameToEmail)
}
}
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误
error: reassignment to val
val nameToEmail = persons.filter(_.emailAddresses.length>0).foldLeft(emptyMap)((b,p)=> b+=p.name->p.emailAddresses)
Run Code Online (Sandbox Code Playgroud)
b这是闭包的参数名称本身是a val,不能重新分配.
foldLeft通过将闭包的一个调用的返回值作为参数b传递给下一个来工作,所以你需要做的就是返回b + (p.name->p.emailAddresses).(不要忘记括号的优先权.)
| 归档时间: |
|
| 查看次数: |
11944 次 |
| 最近记录: |