我有一个使用以下方法的课程:
def message[A <: AnyRef](a: A) = a match {
case str: String => messages ++ str
case _: AnyRef => serializer.write(_) //compile error
}
我认为_
可能会在任何我们不想使用某些特定字符的情况下使用。但是
def message[A <: AnyRef](a: A) = a match {
case str: String => messages ++ str
case a: AnyRef => serializer.write(a)
}
工作正常。
_
有什么问题?作为方法参数使用的限制是什么?
答案 0 :(得分:2)
case _: AnyRef => serializer.write(_)
这些通配符不相关。您的第一个_
表示您不关心您只是为其提供类型的名称。第二个_
表示您不关心此时将向write
提供的内容,您将在稍后提供。正如您可能想到的那样,代码中的_
与您无关。
答案 1 :(得分:1)
serializer.write(_)
中发生错误,因为编译器没有此_
的任何可能值。例如,如果您要撰写List(1, 2, 3) map (_ + 2)
,那么可以将其扩展为List(1, 2, 3) map (x => x + 2)
,而 x
可能会隐藏_