我有一个用case类实例填充的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)
答案 0 :(得分:6)
每个参数只能使用_
一次,因此scala认为您正在寻找一个带有两个参数的方法,而且它告诉您它只需要一个带有一个参数的方法。这应该工作:
val week = weeks.find(p => now >= p.start && now <= p.end).headOption
.map( _.week).getOrElse{0}
作为旁注,您不需要使用headOption
,因为find
已经返回与您的谓词匹配的第一个实例的选项。此外,您应使用map
代替getOrElse
和fold
,因为它具有更强的类型安全性:
val week2 = weeks.find(p => now >= p.start && now <= p.end).fold(0)( _.week)