我应该如何思考Scala的产品类?

包“scala”有许多类Product,Product1,Product2等,直到Product22。

这些类的描述无疑是精确的。 例如:

Product4 is a cartesian product of 4 components 

确实,是的。 交际? 没那么多。 我期望这是一个已经理解这里使用的“笛卡尔产品”意义的人的完美措辞。 对于没有的人来说,这听起来有点循环。 “哦,是的,当然,产品4是四个咕</s>咕嘟咕嘟的咕咕咕咕咕咕咕咕咕咕咕咕咕

请帮助我理解正确的function语言观点。 这里使用的“笛卡尔积”是什么意思? 产品类的“投影”成员表示什么?

“所有可能的元素对的集合,其成分是两组的成员”。

具体而言,表示为X×Y的两组X(例如x轴上的点)和Y(例如y轴上的点)的笛卡尔乘积是所有可能的有序对的集合,其第一组件是X的成员,其第二个组件是Y的成员(例如整个xy平面)“

也许更好的理解可以通过知道谁来源而得到:

直接已知的子类:Tuple4

或者,通过知道它“ 扩展产品 ”,通过扩展Product本身,知道其他类可以使用它。 我不会在这里引用,因为这个时间太长了。

无论如何,如果你有typesA,B,C和D,则Product4 [A,B,C,D]是一个类,其实例是A,B,C和D的笛卡尔积的所有可能元素。

当然,除了产品4是特质而不是类。 它只是为四类不同的笛卡尔积的类提供了一些有用的方法。

其他人都去了math,所以我会去愚蠢的答案,以防万一! 你有一辆简单的汽车,有一个变速箱,一个方向盘,一个加速器和一些乘客。 这些因素可能会有所不同: 你在哪个档位,你是哪个方向转向,是你的脚在地板上等等。因此,变速箱,转向装置,加速器等都是variables ,每个variables都有自己的可能值。

这些套装中的每一个的笛卡尔产品基本上都是你的车可以进入的所有状态 。 所以一些可能的值是:

 (gear, steer, accel, pssngers) --------|---------|----------|--------- (1st, left, foot down, none) (neutral, straight, off, the kids) 

笛卡尔乘积的大小当然是每组可能性的乘积(乘法)。 因此,如果您的车有5档(+倒档+空档),转向左/右/右,油门开/关,最多4名乘客,则有7 x 3 x 2 x 4或168种可能的状态。

这最后一个事实是笛卡尔积(顺便提一下,命名为笛卡尔 )的乘积符号x

从这个线程 :

从math上看,两个集A,B的笛卡尔乘积表示为AxB ,其元素是(a, b) ,其中a和b都在A中。

对于三组,笛卡尔积的元素是(a, b, c)等等。

所以,你有元组的元组,事实上你可以在Scala库中看到所有的元组(如Tuple1 )都inheritance了相应的产品特征(如Product1 )。

把产品看作抽象,把相应的元组作为具体的表示

该投影允许获得产品引用的“n”类的实例。

笛卡儿产品是集合的产物。 给定集合A和B,A x B(“A交叉B”)是所有元组(x,y)的集合,使得x在A中,而y在B中。笛卡儿积可以types定义在types上:给定typesA和B,A x B是元组(x,y)的types,其中x是typesA,y是typesB.

所以Product4是元组(w,x,y,z)的types,其中w,x,y,z是分量。