Swift 4 - FlatMap 不展平数组

Swift 4 - FlatMap does not flatten array

我在玩 Swift,但在 flatMap 上遇到了一些麻烦。我看过 this Whosebug 问题,它描述了如何使用 flatMap 展平数组数组,但是当我在操场上重现相同的代码时,它并没有展平数组。如果有人可以提供一些关于这里发生的事情的见解,我将不胜感激。

这是代码和结果的屏幕截图:

flatMap 用于数组的数组;它将内部数组的内容提升为外部数组的内容。那就是 all 它确实如此。它不会神奇地递归。它适用于 [[Element]] 类型的数组,其中 Element 是某种单一类型。

也就是说[[1],[2]]的平面图是[1,2],因为那是数组的数组;它的类型是 [[Int]].

但是[1,[2]]不是数组的数组。它实际上不是 任何东西 的数组;它在 Swift 世界中没有任何意义,其中数组的元素必须全部属于同一类型。所以它只是 Any 的数组(正如您的代码所承认的那样); Swift 甚至 看不到 数组 t1 中的任何数组。所以 flatMap 不适用。

在理想情况下,您的代码甚至无法编译,因为在 Any 数组上使用 flatMap 是非法的。不幸的是,有(或曾经有)另一个 flatMap,并且编译器放弃了适用于 [[Element]]flatMap,求助于其他 flatMap。它适用于任何数组,因此您的代码最终是合法的(但它 still 什么都不做)。参见 Flatten [Any] Array Swift