What are the hidden features of Scala that every Scala developer should be aware of?
One hidden feature per answer, please.
Sommaire |
What are the hidden features of Scala that every Scala developer should be aware of?
One hidden feature per answer, please.
Okay, I had to add one more. Every Regex object in Scala has an extractor (see answer from oxbox_lakes above) that gives you access to the match groups. So you can do something like:
// Regex to split a date in the format Y/M/D. val regex = "(\d+)/(\d+)/(\d+)".r val regex(year, month, day) = "2010/1/13"
The second line looks confusing if you re not used to using pattern matching and extractors. Whenever you define a val or var, what comes after the keyword is not simply an identifier but rather a pattern. That s why this works:
val (a, b, c) = (1, 3.14159, "Hello, world")
The right hand expression creates a Tuple3[Int, Double, String] which can match the pattern (a, b, c).
Most of the time your patterns use extractors that are members of singleton objects. For example, if you write a pattern like
Some(value)
then you re implicitly calling the extractor Some.unapply.
But you can also use class instances in patterns, and that is what s happening here. The val regex is an instance of Regex, and when you use it in a pattern, you re implicitly calling regex.unapplySeq (unapply versus unapplySeq is beyond the scope of this answer), which extracts the match groups into a Seq[String], the elements of which are assigned in order to the variables year, month, and day.
License : cc by-sa 3.0
http://stackoverflow.com/questions/1025181/hidden-features-of-scala