如何匹配匹配的案例以及下面的另一个案例?

时间:2017-12-18 13:32:37

标签: scala switch-statement match break

我知道我无法 Scala break声明中使用match

是否有匹配案例以及以下案例的原因?

例如,在 Java 中,我可以执行以下操作:

int i=3;
switch(i) {
    case 1:
        a();
        break;
    case 2:
        b();
    case 3:
        c();
    case 4:
        d();
        break;
    default: z();
}

我如何在 Scala 上做同样的事情?

3 个答案:

答案 0 :(得分:3)

您需要两次(或更多次)编写代码。在Scala中,不可能从case转到下一个val i = 3 i match { case 1 => a() case 2 => { b() c() d() } case 3 => { c() d() } case 4 => d() case _ => z() 。即使在可能的语言中,通常也不是一个好主意;它可能是难以发现的错误的来源(尽管有些情况下可以有效地使用它)。

在Scala中代码看起来像这样:

{{1}}

答案 1 :(得分:2)

可以这样做,但您必须定义自己的String url="Your Url"; Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(browserIntent); webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl(url); 方法。

switch

这有效,但它的语法略显不正统。因为它需要// switch statement with dropthrough logic def switch[T](i: T)(actions: (T, () => Unit)*)(default: => Unit) = { val acts = actions.dropWhile(_._1 != i).map{_._2} if (acts.isEmpty) default else acts.foreach{_()} } 而不是return,所以不应该有break之后的代码。

switch

总而言之,可能比它的价值更麻烦。

答案 2 :(得分:0)

您无法将Java代码直接转换为Scala而无需重复代码,因为您无法在一次传递中在匹配语句中执行多个备选方案。 但是,为避免替代方案中的代码重复,您可以做的是多次处理相同的匹配语句,

例如

@tailrec
def switch(x : Int): Unit =
     x match {
       case 1 => a()
       case 2 => b(); switch(3)
       case 3 => c(); switch(4)
       case 4 => c()
       case _ => z()
     }

switch(3)