非文字值的模式匹配

时间:2014-08-16 22:26:59

标签: scala scala-2.10

我觉得这是一个愚蠢的问题,但无论如何我都会问......我正在尝试做这样的事情:

def func(x: Int, y: Int) = {
  val value: Int = 0 //from config
  (x, y) match {
    case (value, value) => "foo"
    case _ => "bar"
  }
}

但是repl和intelliJ都警告我。 (例如“变量模式后的模式不匹配”​​;“可变模式的可疑模糊”等)。是否有正确的方法来匹配非文字值?

1 个答案:

答案 0 :(得分:14)

是的!有两种方法可以获得你想要的东西。第一种是将要匹配的变量的名称大写:

def func(x: Int, y: Int) = {
  val Value: Int = 0 // from config
  (x, y) match {
    case (Value, Value) => "foo"
    case _ => "bar"
  }
}

如果你不想走这条路(因为它不是用来大写变量名等的惯用语),你可以在比赛中反击它们:

def func(x: Int, y: Int) = {
  val value: Int = 0 // from config
  (x, y) match {
    case (`value`, `value`) => "foo"
    case _ => "bar"
  }
}

我建议在大多数情况下使用反引号。