[問題] javascript 函數式寫法的狀態傳遞
當初看到的貪食蛇專案 https://www.youtube.com/watch?v=bRlvGoWz6Ig
https://github.com/chrokh/fp-games/tree/master/001-snake
最讓我疑惑不解的是關於下次狀態的移動方向程式碼
用來把使用者輸入的方向加入佇列後回傳新狀態的是這段程式碼
const enqueue = (state, move) => validMove(move)(state)
? merge(state)({ moves: state.moves.concat([move]) })
: state
然後取出佇列中的方向的是這一段
const nextMoves = state =>
state.moves.length > 1 ? dropFirst(state.moves) : state.moves
dropFirst 是作者自訂的函式,目的是為了讓取出第一個元素的語義更清楚
const dropFirst = xs => xs.slice(1)
這邊是使用不會改變原陣列的 slice 函式
疑惑的點是,既然不會改變原陣列,那隨著輸入的方向越來越多,豈不是永遠不會減少?
可是看影片沒有這種情況
如果說是因為 nextMoves 這個函式讓每個新狀態的 moves 都只剩一個元素,那又是怎
麼讓 moves 內存有三個以上的方向,且使用者也不再進行輸入(所以不會觸發 enqueue
函式)時,讓 moves 剩下的方向可以保留到下次的新狀態呢?
--
「看在上帝的份上,我們不能當著孩子的面槍殺他的父親!」
「那我們就連孩子一起幹掉!」
「第一槍打中的是那個天真的孩子,第二槍是抱著孩子的母親。第三槍
停頓了三秒,當難以致信的父親擦拭著臉上愛子的腦漿從震驚中醒轉
過來,慢慢的轉頭看向停車的地方,分辨出是誰在攻擊他後,第三顆
子彈才將他的腦殼打飛。」 ─摘自〈狼群〉
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.237.26.61
※ 文章網址: https://www.ptt.cc/bbs/Programming/M.1540732576.A.224.html
推
10/28 23:00,
6年前
, 1F
10/28 23:00, 1F
→
10/28 23:01,
6年前
, 2F
10/28 23:01, 2F
→
10/28 23:02,
6年前
, 3F
10/28 23:02, 3F
→
10/29 01:19,
6年前
, 4F
10/29 01:19, 4F
→
10/29 01:21,
6年前
, 5F
10/29 01:21, 5F
Programming 近期熱門文章
PTT數位生活區 即時熱門文章