为什么占位符不起作用?

时间:2016-09-02 11:02:53

标签: scala methods

我有一个使用以下方法的课程:

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)
}

工作正常。

_有什么问题?作为方法参数使用的限制是什么?

2 个答案:

答案 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可能会隐藏_