Question

I stumbled across a pretty interesting behavior in Scala.

scala> def foo(t: (Int, Int, Int)): Int = t._1 
foo: (t: (Int, Int, Int))Int

scala> foo(1,2,3)
res23: Int = 1

scala> foo((1,2,3))
res24: Int = 1

This also works the other way round:

scala> Some(1,2,3,4,5)     
res31: Some[(Int, Int, Int, Int, Int)] = Some((1,2,3,4,5))

While this sugar is extremely useful I did not find any documentation concerning this. So my question is basically: Where is this documented in the Scala Language Specification, and what other implications does this have if any.

Regards, raichoo

Was it helpful?

Solution

It is known a Automatic Tupling. I lodged a bug against the language specification, which is silent on this matter.

Here's the relevant part of the compiler source code.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top