Array.set 期望 Array.Array Char,但得到 May (Array.Array Char)

  • 本文关键字:Array Char May set 期望 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', ' ' ]行中的空白点

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

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

这使得榆树在Nothing的情况下使用[ 'X', 'X', 'X' ]row1