Я изучаю вяз и бездельничал, пытаясь создать небольшой редактор растровых изображений.Это почти работает, но демонстрирует очень странное поведение ... Так что после попытки что-то сделать в реплее, это поведение, похоже, происходит здесь: в выравнивании 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
, прежде чем превращать их в списки.
Вот где ... начинается:
> 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
, тоже не бывает ... так откуда же это взято ???
EDIT: как предложено Люком Вудвордом ниже, это кажется ошибкой в текущей реализации Arrayсм. Git Issue .