gpt4 book ai didi

scala - 是 | (或)在scala中进行模式匹配时短路?

转载 作者:行者123 更新时间:2023-12-04 22:12:53 25 4
gpt4 key购买 nike

我注意到没有 ||模式匹配时可用的运算符 - is |短路?

最佳答案

在模式匹配中,| 被短路。您不能使用 or-operator 调用 unapply 等(带有返回的参数),其中更可能产生副作用。所以短路纯粹是一种优化技术(不会影响代码的正确性,除非在特殊情况下,例如副作用相等的方法)。这确实意味着出于性能或副作用的原因,您短路或不短路的能力受到限制。

要看到这一点,如果我们编写以下代码:

def matchor(s: String) = s match {
case "tickle" | "fickle" => "sickle"
case _ => "hammer"
}

我们看到这个字节码(部分)
public java.lang.String matchor(java.lang.String);
Code:
0: aload_1
1: astore_2
2: ldc #12; //String tickle
4: aload_2
5: astore_3
6: dup
7: ifnonnull 18
10: pop
11: aload_3
12: ifnull 25
15: goto 31
18: aload_3
19: invokevirtual #16; //Method java/lang/Object.equals:(Ljava/lang/Object;)Z
22: ifeq 31
25: iconst_1
26: istore 4
28: goto 66
31: ldc #18; //String fickle
33: aload_2
...
66: iload 4
68: ifeq 78
71: ldc #20; //String sickle
73: astore 6
75: goto 82
...
82: aload 6
84: areturn

请参阅第 28 行的跳转以避免测试 "fickle" 案例?那就是短路。

关于scala - 是 | (或)在scala中进行模式匹配时短路?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19503767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com