是"案例.."支持榆树的堕落?

时间:2015-10-26 12:06:48

标签: pattern-matching elm

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;
  }
}

你将如何在榆树中实现这一点?

2 个答案:

答案 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 
榆树的情况并没有落空。

  

“案例表达没有落空,所以你不需要说到处都是为了让事情变得清醒。”

http://elm-lang.org/guide/model-the-problem

答案 1 :(得分:4)

我认为 pdamoc 的答案是你想要做的最好的答案。但是,为了完整性,没有榆树案例不支持通过。最好的解决方案是将公共代码提取到函数中。如果您对数据建模很好,可以减少调用此函数的不同情况的数量。

案例表达式支持默认使用_ -> code,它应该始终是最后一种情况,因为它将匹配任何内容。如果可以,你应该避免使用它;在0.16中,编译器将为您检测未处理的案例。

最后,你可以在union标签上使用if和相等,但它通常比使用case更糟糕。

if List.member action [MoveLeft, MoveRight, MoveUp, MoveDown]
then move action model
else shuffle model