Array.set需要Array.Array Char但得到Maybe(Array.Array Char)

问题描述 投票:0回答:1

不确定这里的问题究竟是什么。我是Elm的新手,所以很容易。

board = [ [ 'P', 'P', ' ' ], [ ' ', ' ', ' ' ], [ ' ', ' ', ' ' ] ]

move = nextBestMove board


nextBestMove : List (List Char) -> Int
nextBestMove gameNode =
    let
        node =
            map fromList gameNode

        -- node is now List (Array.Array Char)

        currentBoard =
            fromList node

        -- currentBoard is now Array.Array (Array.Array Char)

        row1 =
            get 0 currentBoard

        -- row1 is now Maybe.Maybe (Array.Array Char)

        -- now I want to place an X for the empty value in [ 'P', 'P', ' ' ]
        row1NextState =
            set 2 'X' row1

... rest of code

我得到的类型不匹配错误是:

The 3rd argument to function `set` is causing a mismatch.

22|             set 2 'X' row1
                          ^^^^
Function `set` is expecting the 3rd argument to be:

    Array.Array Char

But it is:

    Maybe (Array.Array Char)

我不明白为什么因为我现在认为我有一个二维数组,它应该是好的去。我想要做的是获得指向游戏板第一行的指针。所以我想基本上得到[0] [0]所以我可以更新行[ 'P', 'P', ' ' ]中的空白点

elm
1个回答
1
投票

如你所知,get函数吐出Maybe类型。这意味着我们需要将Maybe类型转换为Array类型以在set中使用它。我们可以在这里使用像withDefault这样的函数。

    row1NextState =
        set 2 'X' (withDefault (Array.initialize 3 (always ‘X’)) row1)

这使得榆树使用[ 'X', 'X', 'X' ]以防row1Nothing

© www.soinside.com 2019 - 2024. All rights reserved.