我无法将OCaml中的Array与修改区分开来

Пав*_*ерг 1 arrays ocaml mutable

是完整的代码.我会尝试展示一些作品.我正在写一个通过telnet工作的tic tac toe服务器.这是游戏板的代表

let empty_board = [|
                [|EMPTY; EMPTY; EMPTY|];
                [|EMPTY; EMPTY; EMPTY|];
                [|EMPTY; EMPTY; EMPTY|]|]
Run Code Online (Sandbox Code Playgroud)

它仅用于Array.copy在游戏循环中传递玩家描述符和新棋盘:

let prepare_game_process pair_of_players= 
 pair_of_players >>= fun (player1, player2) ->  
 send_to_client player1 "You play for X";
 send_to_client player2 "You play for O";
 let new_board = Array.copy empty_board in
 game_loop player1 player2 new_board
Run Code Online (Sandbox Code Playgroud)

但是每次新游戏开始时,game_loop中的所有更改都会反映到原始的empty_board:

let make_move x y board token=
 board.(y).(x) <- token;
 board
Run Code Online (Sandbox Code Playgroud)

我看了十亿次代码,但我根本看不出原因.

Tho*_*ard 5

您只是复制外部数组,而不是单个行数组.