Scala中的笛卡尔积函数

时间:2018-10-12 15:55:11

标签: scala

我正在尝试编写一个通用的cross函数,该函数将产生两个可迭代对象的笛卡尔积。这是我的尝试:

      def cross[a, b, A <: Iterable[a], B <: Iterable[b]](a: A, b: B): Iterable[(a, b)] =
        for (i <- a; j <- b) yield (i, j)

但是,签名并不完全正确。我得到:

Error:(147, 15) inferred type arguments [Nothing,Nothing,List[Int],Array[String]] do not conform to method cross's type parameter bounds [a,b,A <: Iterable[a],B <: Iterable[b]]
  println(cross(List(1, 2, 3), Array("a", "b", "c")))

写此签名的正确方法是什么,我想在不同类型的元素上使用2 Iterable

1 个答案:

答案 0 :(得分:2)

def cross[A, B](a: Iterable[A], b: Iterable[B]): Iterable[(A, B)] =
            for (i <- a; j <- b) yield (i, j)