您可以使用隐式类和for
-Scala 2.10 中的理解:
implicit class Crossable[X](xs: Traversable[X]) {
def cross[Y](ys: Traversable[Y]) = for { x <- xs; y <- ys } yield (x, y)
}
val xs = Seq(1, 2)
val ys = List("hello", "world", "bye")
And now:
scala> xs cross ys
res0: Traversable[(Int, String)] = List((1,hello), (1,world), ...
在 2.10 之前这是可能的,只是不太简洁,因为您需要定义类和隐式转换方法。
你也可以这样写:
scala> xs cross ys cross List('a, 'b)
res2: Traversable[((Int, String), Symbol)] = List(((1,hello),'a), ...
如果你想xs cross ys cross zs
返回一个Tuple3
,但是,您将需要大量样板或类似的库无形的 https://github.com/milessabin/shapeless.