2

このコードの何が問題になっていますか?

object Numbers extends App {

  def decode(number: Int) : String = number match {
    case _ if _ % 15==0 => "fizzbuzz"
    case _ if _ % 3==0 => "fizz"
    case _ if _ % 5==0 => "buzz"
    case _ => _.toString
  }

  val test = List(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
  test.map(decode).foreach(println)
}

次のエラーが表示されます。

error: missing parameter type for expanded function
The argument types of an anonymous function must be fully known. (SLS 8.5)
Expected type was: String
case _ if _%15==0 => "fizzbuzz"

コンパイラがパラメータの型を認識しないのはなぜですか? ありがとう

4

1 に答える 1

7

(_ % 15 == 0)関数に展開されます(x: ?) => x % 15 == 0。他のifチェックも同様です。
パラメーターに関する情報がないため、コンパイラーはそれを推測できません。これは、前のアンダースコアとは関係のない新しい名前case _です。したがって、一致した名前を参照するためにアンダースコアを使用することはできません。次のように、実際に名前を割り当てる必要があります。case x if x % 15 == 0

于 2012-08-10T12:11:29.917 に答える