如何在Elm中将点击信号传播到模型更新?
我正在用Elm编写一个游戏,在这个游戏中有一个按钮,按下该按钮时,游戏板将重置为初始状态。然而,我不明白按钮点击信号是如何传播到电路板模型的更新功能的。在下面的代码中,我刚刚将单位值传递给如何在Elm中将点击信号传播到模型更新?,elm,elm-signal,Elm,Elm Signal,我正在用Elm编写一个游戏,在这个游戏中有一个按钮,按下该按钮时,游戏板将重置为初始状态。然而,我不明白按钮点击信号是如何传播到电路板模型的更新功能的。在下面的代码中,我刚刚将单位值传递给stepBoard,但我不能用它做太多事情,因此如何解决它 --MODEL type Board = [(Int,Int)] type Game = {name: String, board: Board} defaultGame = {name = "Test", board = [(3,3)]} --UP
stepBoard
,但我不能用它做太多事情,因此如何解决它
--MODEL
type Board = [(Int,Int)]
type Game = {name: String, board: Board}
defaultGame = {name = "Test", board = [(3,3)]}
--UPDATE
stepBoard click (colsInit, rowsInit) (rows, cols) g =
{g | board <- if ? then --some initial value (colsInit, rowsInit)
else --some updated value using (rows, cols)}
stepGame: Input -> Game -> Game
stepGame {click, name, rowsColsInit, rowsCols} g = stepBoard click (0,0) (0,0) g
game = foldp stepGame defaultGame input
--INPUT
type Input = {click:(), name: String, rowsColsInit: (Int,Int), rowsCols: (Int,Int)}
input = Input <~ clicks ~ nameSignal ~ rowsColsInitSignal ~ rowsColsSignal
--VIEW
(btn, clicks) = Input.button "Click"
--模型
类型板=[(Int,Int)]
类型Game={name:String,board:board}
defaultGame={name=“Test”,board=[(3,3)]}
--更新
踏板点击(列,列)(行,列)g=
{g |棋盘游戏->游戏
stepGame{click,name,rowsColsInit,rowsCols}g=stepBoard click(0,0)(0,0)g
game=foldp stepGame defaultGame输入
--输入
键入Input={click:(),name:String,rowscolsint:(Int,Int),rowsCols:(Int,Int)}
输入=输入组合foldp
和单击信息可能不直观
通常采用的解决方案是ADT对不同的可能事件进行编码:
data Input = Init (Int, Int)
| Update { name : String
, rowsCols : ( Int, Int )
}
input = merge (Init <~ (sampleOn clicks rowsColsInitSignal))
(OtherInput <~ nameSignal ~ rowsColsSignal)
stepBoard input g =
let newBoard =
case input of
Init (initRows, initCols) -> -- do your initialisation here
Update {name, rowsCols} -> -- do your update here
in { g | board <- newBoard }