代码之家  ›  专栏  ›  技术社区  ›  mtnygard

我应该如何看待斯卡拉的产品类?

  •  55
  • mtnygard  · 技术社区  · 15 年前

    包“scala”有许多名为product、product1、product2等的类,最多可以是product22。

    对这些类的描述肯定是精确的。例如:

    Product4 is a cartesian product of 4 components
    

    没错,是的。交际?没那么多。我希望这是一个完美的措辞谁已经了解“笛卡尔产品”的意义正在这里使用。对于不喜欢的人来说,这听起来有点循环。”哦,是的,当然,产品4是 喃喃自语 4的乘积 喃喃喃喃 ."

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

    5 回复  |  直到 6 年前
        1
  •  28
  •   Daniel C. Sobral    15 年前

    "The set of all possible pairs of elements whose components are members of two sets."

    "Specifically, the Cartesian product of two sets X (for example the points on an x-axis) and Y (for example the points on a y-axis), denoted X × Y, is the set of all possible ordered pairs whose first component is a member of X and whose second component is a member of Y (e.g. the whole of the x-y plane)"

    也许通过了解谁从中获得更好的理解:

    直接已知子类: tup4

    或者,通过了解它” 延伸产品 “,了解通过扩展 Product 本身。不过,我不会在这里引用它,因为它相当长。

    无论如何,如果你有A、B、C和D类型,那么product4[A、B、C、D]是一个类,它的实例都是A、B、C和D笛卡尔积的所有可能元素。

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

        2
  •  47
  •   oxbow_lakes    15 年前

    其他人都去学数学了,所以为了以防万一,我会去学那个愚蠢的答案!你有一辆简单的汽车,它有一个变速箱,一个方向盘,一个加速器和许多乘客。它们各不相同: 你在哪个档位,你在哪个方向,你的脚是“在地板上”吗? 因此,变速箱、转向系统、加速器等 变量 每个都有自己的 设置 可能的值。

    这些集合的笛卡尔积基本上是 所有可能的状态,你的车可以在 . 因此,一些可能的值是:

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

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

    最后一个事实是笛卡尔积(以 笛卡儿 顺便说一下)有乘法符号 x

        3
  •  7
  •   VonC    15 年前

    this thread :

    从数学上讲,两个集合a,b的笛卡尔积表示为 AxB 它的元素是 (a, b) ,其中a在a中,b在b中。

    对于三个集合,(笛卡尔)积的元素是 (a, b, c) 等等……

    所以,你有元素的元组,实际上你可以在scala库中看到所有的元组(比如 Tuple1 )继承各自的产品特性(如 Product1 )

    把产品看作抽象,把各自的元组看作具体的表示。 .

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

        4
  •  4
  •   Thom Smith    15 年前

    笛卡尔积是集合的乘积。给定集合a和b,a x b(“a cross b”)是所有元组(x,y)的集合,这样x在a中,y在b中。笛卡尔积可以类似地定义在类型上:给定类型a和b,a x b是元组(x,y)的类型,其中x是类型a,y是类型b。

    所以product4是元组的类型(w,x,y,z),其中w,x,y,z是组件。

        5
  •  0
  •   Norman Bai    6 年前

    我想有人可能会感到困惑 Product 就像一个成员迭代器一样工作,就像我做的那样。

    事实上,我认为2019年每个人都知道 笛卡尔积 是。但笛卡尔积在元组中的位置呢?我知道如果我们有A,B,C和1,2,3我们会得到A,1,A,2…C,3。但是当我们遇到tuple2(a,1)时,我们只有(a,1),一个对象如何能产生?

    那么让我们来处理实现 产品 作为声明。如果类A(string、int、double)实现product3,我们将该类视为 笛卡尔积 of(string,int,double),因此您知道可以使用 _1 _2 _3 方法现在。