模式匹配检查元组类型

时间:2018-02-07 17:58:32

标签: scala pattern-matching match

我正在尝试使用Scala的模式匹配功能来检查第一个参数的类型,并接受第二个参数的任意类型 - 尽管我不确定语法在Scala中是如何工作的,因为我相当新,我无法找到任何关于元组如何在Scala中相互作用的内容,因为它与模式匹配和案例陈述有关。

我最初的尝试:

case foo => (eval(e1, e2), eval(e1, e2)) match
{
    case (S(e1), _) => (bar(e1, e2) + bar(e1, e2))
    case _ => ???
}

其中,这个应该,在这种情况下,检查第一个参数是一个字符串,并接受第二个参数为什么,然后做任何想做的事情。

此外,我见过这样的例子:

case (_: String, _: Int) => ???

但是,我不清楚你如何在右手声明中引用这些参数。

在语句中引用这些_参数的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您使用:来确定类型。下面的例子。您可以使用变量引用任何值,而无需明确声明类型。

Scala REPL

scala> :paste
// Entering paste mode (ctrl-D to finish)

("Java", 1) match {
  case (str: String, v) => println(s"value: $v")
  case _ => println("something")
}

// Exiting paste mode, now interpreting.

value: 1