MyT*_*tle 6 functional-programming scala pattern-matching
我知道在功能样式中所有if-else块都被模式匹配所取代.但是我如何处理MapScala中的模式匹配?例如,我如何以更多功能样式重写此代码?
val myMap= getMap()
if(myMap.contains(x) && myMap.contains(y)) Some(myMap(x) + myMap(y))
else if(myMap.contains(x + y)){
val z = myMap(x + y)
if (z % 2 == 0) Some(z)
else None
}
else None
Run Code Online (Sandbox Code Playgroud)
zig*_*tar 20
使用if-else对于函数式编程是完全可以接受的,因为if-else在Scala中它只是一个表达式.决定if-else和模式匹配的原因应该主要集中在提高可读性上.
这是我尝试重写代码.我实际上并没有在这里使用模式匹配,而是用于for理解值的理解.
def sumOfValues = for{
mx <- myMap.get(x)
my <- myMap.get(y)
} yield mx + my
def valueOfSumIfEven = myMap.get(x+y).filter(_ % 2 == 0)
sumOfValues orElse valueOfSumIfEven
Run Code Online (Sandbox Code Playgroud)