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

パラメーターごとに 1 回しか使用できない_ため、scala は、find に 2 つのパラメーターを受け取るメソッドを指定していると見なし、1 つのパラメーターを持つメソッドのみを受け取ることを伝えています。これは代わりに機能するはずです:

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

補足として、述語に一致する最初のインスタンスのオプションを既に返しているheadOptionため、使用する必要はありません。findさらに、 and の代わりに、より強力な型安全性を持つ a を使用する必要がmapあります。getOrElsefold

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