1

以下の FizzBu​​zz のスカラ実装はどのように機能しますか?

これが私が思うことですが、私が正しい軌道に乗っているかどうかはわかりません:これは高次=>関数ですか? i"FizzBuzz""Fizz""Buzz"

package fizzbuzz

object FizzBuzz {
  def main(args : Array[String]) {
    (1 until 100).map(_ match {                
      case i : Int if ((i % 3) == 0 && (i % 5) == 0) => "FizzBuzz"
      case i : Int if ((i % 3) == 0) => "Fizz"
      case i : Int if ((i % 5) == 0) => "Buzz"
      case i : Int => i.toString
    }).foreach(println _)
  }
}
4

2 に答える 2

3

の使用 => これは高次関数ですか?

いいえ、これ=>は match-case 構文の一部です。これは、指定されたケースのパターンをケースの本体から分離します。つまり、構文は、指定された値に対してパターンが一致するcase pattern => body場所であり、一致した場合に実行されるはずのコードです。patternbodypattern

このコードは、(map を使用して) 1 から 100 までの数値を反復処理し、各数値をmatchブロック内のパターンと照合することによって機能します。パターンは、パターン ガードを使用して、各数値が 3、5、またはその両方で割り切れるかどうか (またはどちらも割り切れないか) をチェックします。結果は文字列のシーケンスです。次に、コードは を使用してそのシーケンスを反復処理し、 を使用foreachして各アイテムを出力しprintlnます。

于 2012-10-05T13:23:46.363 に答える