私は、位置のリストと関数(位置と生成とオプションのパスを引数とする)を引数として取る関数を記述しようとしています。スカラーのオプション
だから、fの結果がNoneでない最初の位置を見つける必要があります。関数については、型を除いて何も知る必要はありません。
私は、位置のリストと関数(位置と生成とオプションのパスを引数とする)を引数として取る関数を記述しようとしています。スカラーのオプション
だから、fの結果がNoneでない最初の位置を見つける必要があります。関数については、型を除いて何も知る必要はありません。
xs.view.map(f(_)).find(_.isDefined)
私はビューではなくイテレータを使用します。また、 'f'の後に'(_) 'は必要ありません。 それ以外のことは...エレガントで慣用的な解決方法は+1です。 – Dima
これを行うことで、あなたが何をしたのか正確に説明できますか?これは関数内のすべての分岐をどのように表していますか? –
@Dima right、iteratorも同様に動作します。私はそれも怠惰を提供していることを認識していませんでした。 –
あなたが好きなら(尾:しかし、我々は
だから、基本的にこれは私が記述しようとしています方法だろうF(X)の結果は、(一度だけ)何であるかを計算する必要があります)再帰:
case class Pos(value: Int)
case class Path(value: Int)
@scala.annotation.tailrec
def first(xs: List[Pos], f: Pos => Option[Path]) : Option[Path] = xs match {
case Nil => None
case p :: res => f(p) match {
case None => first(res, f)
case r => r
}
}
val list = List(Pos(1), Pos(2))
def f(p: Pos): Option[Path] =
if(p.value == 2) Option(Path(2)) else None
println(first(list, f)) // prints "Some(Path(2))"
私は全くScalaで多くの経験を持っていないと私はオプションは、画像の最初の行があれば(XS ==無記号)なしに相当するused.Wouldされる方法を不思議でしたか? –