Scala 2.13:如何避免重复创建样例类?
优化Scala密封特质模式匹配:直接复用匹配实例
当然可以优化,你完全没必要解构样例类参数再重新创建相同实例——直接绑定匹配到的整个实例就行,既减少冗余代码,又避免不必要的对象创建。
优化后的代码(分情况匹配)
expressions.head match { case expr: SingleValueExpression => filter ++ FromScala(expr).transform(ToJson.string) case expr: MultipleValueExpression => filter ++ FromScala(expr).transform(ToJson.string) }
进一步精简(合并相同逻辑的case)
因为两个分支的处理逻辑完全一致,还可以用@模式绑定把两个case合并:
expressions.head match { case expr @ (_: SingleValueExpression | _: MultipleValueExpression) => filter ++ FromScala(expr).transform(ToJson.string) }
为什么这样可行?
- 密封特质的所有子类都是已知的,编译器会帮你检查是否覆盖了所有可能的匹配分支,不用担心遗漏情况。
- 直接绑定实例到
expr变量,直接复用原对象,省去了解构再重建的无意义操作,代码更简洁高效。
内容的提问来源于stack exchange,提问作者Shivam Sahil
相关产品推荐
相关产品推荐

