1

我有一个填充了案例类实例的 Seq val。然后我尝试使用该find方法来找到符合我的条件的第一个选项。这是代码:

val week = weeks.find(now >= _.start && now <= _.end).headOption.map( _.week).getOrElse{0}

这给了我一个错误:

wrong number of parameters; expected = 1

我在上面错误地使用了 find 方法吗?weeks填充有帮助的事件类具有以下定义:

case class Period(week: Int, start: DateTime, end: DateTime)
4

1 回答 1

6

每个参数只能使用_一次,因此 scala 认为您正在给 find 一个带有两个参数的方法,它告诉您它只需要一个带有一个参数的方法。这应该起作用:

val week = weeks.find(p => now >= p.start && now <= p.end).headOption
                .map( _.week).getOrElse{0}

作为旁注,您不需要使用headOption,因为find它已经返回与您的谓词匹配的第一个实例的选项。此外,您应该使用 a 而不是,map因为getOrElsefold具有更强的类型安全性:

val week2 = weeks.find(p => now >= p.start && now <= p.end).fold(0)( _.week)
于 2013-11-08T00:57:39.380 回答