【发布时间】:2018-07-18 03:14:02
【问题描述】:
我正在尝试使用 Scala 的模式匹配功能来检查第一个参数的类型,并接受第二个参数的任意类型——尽管我不确定这在 Scala 的语法上是如何工作的,因为我还很新,并且我找不到任何关于 Scala 中元组如何相互工作的信息,因为它与模式匹配和 case 语句有关。
我最初的尝试:
case foo => (eval(e1, e2), eval(e1, e2)) match
{
case (S(e1), _) => (bar(e1, e2) + bar(e1, e2))
case _ => ???
}
其中,这个应该,在这种情况下,检查第一个参数是一个字符串,并接受第二个是什么,然后做任何bar想要的。
此外,我还看到过这样的例子:
case (_: String, _: Int) => ???
但是,我不清楚您如何在右手声明中引用这些参数。
在语句中引用这些 _ 参数的正确方法是什么?
【问题讨论】:
-
以防万一你不知道,
case (S(e1), _)中的e1不是eval(e1, e2)中的e1。例如val a = "x";case class S(s: String);S("y") match { case S(a) => S(a) } // res1: S = S(y) -
@LeoC 对,它们应该包含在不同的范围内。对我来说,这是一个糟糕的变量名选择。哎呀!后来我在自己的实现中将它们重命名为 lref 和 rref。
标签: scala pattern-matching match