One cool feature I learned a few days ago in Scala was Pattern Matching. It lets you decompose into a virtual switch..case statement any input object or variable, to easily do different things in different cases
Example funciton that returns true if the input is an empty List, otherwise false. This is not obviosuly a good way to implement this feature, but this post is just to demonstrate the pattern matching in action.
def func(x: List[Int]): Boolean = {
x match {
case List() => true // if x matches this pattern return true
case List(x: Int) => false // not needed, but for demo of another pattern match
case _ => false // default case
}
}
So this returns true
func(List()) //> res5: Boolean = true
these return false
func(List(2))
func(List(1,2,2))
Here is another one that matches based on the number of arguments in the provided input list, and return the number of arguments, again lame, but just a demo of the pattern matching feature. This one also uses parameterized type T instead of hardcoding to Int, so List of any type can be passed in. Notice the third example in bold below, it returns a -1 because it matches the _ fallback case.
def func[T](x: List[T]): Int = {
x match {
case List() => 0
case List(x: T) => 1
case List(x: T, y: T) => 2
case _ => -1
}
} //> func: [T](x: List[T])Int
func(List()) //> res5: Int = 0
func(List(1,2,2)) //> res6: Int = -1
func(List("a")) //> res7: Int = 1
func(List("a","b")) //> res8: Int = 2
Comments
Post a Comment