Javascript' s switch
支持落实:
function update(action, model) {
switch (action) {
case SHUFFLE:
return shuffle(model);
case MOVE_LEFT:
case MOVE_RIGHT:
case MOVE_UP:
case MOVE_DOWN:
return move(action, model);
default:
return model;
}
}
你将如何在榆树中实现这一点?
答案 0 :(得分:7)
我会像这样建模:
type Direction = Left | Right | Up | Down
type Action = Shuffle | Move Direction
update action model =
case action of
Shuffle -> shuffle model
Move dir -> move dir model
榆树的情况并没有落空。
“案例表达没有落空,所以你不需要说到处都是为了让事情变得清醒。”
答案 1 :(得分:4)
我认为 pdamoc 的答案是你想要做的最好的答案。但是,为了完整性,没有榆树案例不支持通过。最好的解决方案是将公共代码提取到函数中。如果您对数据建模很好,可以减少调用此函数的不同情况的数量。
案例表达式支持默认使用_ -> code
,它应该始终是最后一种情况,因为它将匹配任何内容。如果可以,你应该避免使用它;在0.16中,编译器将为您检测未处理的案例。
最后,你可以在union标签上使用if
和相等,但它通常比使用case
更糟糕。
if List.member action [MoveLeft, MoveRight, MoveUp, MoveDown]
then move action model
else shuffle model