2

このブログ投稿を読んでいて、コードの一部を理解できませんでした。

object O {
  def maximum(x: List[Int]): Int = x match {
  case Nil => error("maximum undefined for empty list")
  case x :: y :: ys => maximum((if(x > y) x else y) :: ys)
  case x :: _ => x
 }
}

コードを説明してくださいmaximum((if(x > y) x else y) :: ys)

どのようにif条件をメソッドの一部にすることができますmaximumか?
if condition が正確にパラメーターではないことを理解しています。

4

1 に答える 1

12

Scalaでは、ifは式であり、ステートメントではありません。

REPLでこれを試してください:

scala> val x=1; val y=0
x: Int = 1
y: Int = 0

scala> val test=if(x > y) x else y
test: Int = 1

if1に評価され、1がテストに割り当てられます。Javaではif、条件演算子で表現できます(x > y) ? x : y

これで、をパラメーターとして maximum受け取るという関数ができました。と(ifの評価に応じて)の間に1つを追加して取得したリストを使用して、maximumを(再帰的に)呼び出します。List[Int]maximum((if(x > y) x else y) :: ys)xyys

于 2012-09-18T12:24:27.797 に答える