我正在学习榆树,正在努力学习 构建一个小位图编辑器。 它几乎有效,但显示出非常奇怪的行为...... 因此,在repl中尝试填充之后,这种行为似乎就出现了 来源于此:在展平2D数组时。
假设我创建了这两个 3x3阵列:
> import Array exposing (..)
> ones = repeat 3 1 |> repeat 3
Array.fromList
[Array.fromList [1,1,1]
,Array.fromList [1,1,1]
,Array.fromList [1,1,1]]
: Array.Array (Array.Array number)
> grid = initialize 3 <| \j -> initialize 3 <| \i -> (i,j)
Array.fromList
[Array.fromList [(0,0),(1,0),(2,0)]
,Array.fromList [(0,1),(1,1),(2,1)]
,Array.fromList [(0,2),(1,2),(2,2)]]
: Array.Array (Array.Array ( Int, Int ))
在我的情况下,ones
是单色位图,但有一个而不是"#fff"
或{r=15, g=15, b=15}
产生下面相同的尴尬结果。
然后,我将一些List.map2
应用于ones
和grid
以生成我的<rect>
元素。
为此,我使用Array.foldr
展平了这些2D数组,
在将它们转到列表之前。
这就是...开始的地方:
> flatten plane = plane |> foldr append (fromList [])
<function> : Array.Array (Array.Array a) -> Array.Array a
> flatten ones |> length
12 : Int
> flatten grid |> length
9 : Int
尝试使用列表:
>:reset
Environment Reset
> import List exposing (..)
> ones = repeat 3 1 |> repeat 3
[[1,1,1],[1,1,1],[1,1,1]] : List (List number)
> flatten plane = plane |> foldr (++) []
<function> : List (List a) -> List a
> flatten ones |> length
9 : Int
所以这个奇怪的展平不会发生在列表中,但是我使用initialize
创建的数组也不会发生...
那么它来自哪里?
编辑:正如Luke Woodward所建议的那样,这似乎是当前数组实现中的一个错误,请参阅git issue。
答案 0 :(得分:4)
这对我来说就像是榆树Array
模块中的一个错误(Issue with Array.append)。
该错误将在Elm 0.19中修复。在发布之前,要么使用第三方数组包,例如Skinney/elm-array-exploration
,要么不使用Array
。