斯卡拉代码 - 错误:缺少参数类型错误

斯卡拉代码 - 错误:缺少参数类型错误

问题描述:

这段代码有什么问题?斯卡拉代码 - 错误:缺少参数类型错误

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" 

为什么编译器不知道的参数类型? 感谢

(_ % 15 == 0)扩展到功能(x: ?) => x % 15 == 0。其他if检查相同。
编译器无法推断它,因为它没有关于该参数的信息,它是一个新名称,与case _中的以前的下划线无关。所以你不能用那里的下划线来表示匹配的名字,你必须为它指定一个名字,如case x if x % 15 == 0