Scala Seq的发现 - 错误的参数数量;预期= 1

时间:2013-11-08 00:50:15

标签: scala

我有一个用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)

1 个答案:

答案 0 :(得分:6)

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

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

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

val week2 = weeks.find(p => now >= p.start && now <= p.end).fold(0)( _.week)