【问题标题】:Is removing type tags idiomatic elm?删除类型标签是惯用的榆树吗?
【发布时间】:2016-07-15 10:24:04
【问题描述】:

我创建了以下类型,(省略了一些不必要的细节)

type alias Mover =
  { x : Int
  , y : Int
  }


type Piece
  = Enemy Mover
  | Player Mover

我使用这些函数来创建它们

enemy : Int -> Int -> Piece
enemy x y =
  Enemy { x = x, y = y }


player : Int -> Int -> Piece
player x y =
  Player { x = x, y = y }

但我发现自己必须先使用此功能才能真正使用它们...

toMover : Piece -> Mover
toMover piece =
  case piece of
    Enemy mover ->
      mover

    Player mover ->
      mover

...这似乎有些麻烦。这是我应该这样做的方式,还是我让自己变得更加困难?我希望能够将Player 与一些Enemy 实例保持在同一个列表中,有时能够区分它们之间的区别,但也能够编写适用于这两种类型的函数,(子类型?)没有每次都得打电话给toMover

【问题讨论】:

    标签: types type-conversion elm


    【解决方案1】:

    以不同的方式建模:

    type alias Mover =
      { x : Int
      , y : Int
      , kind : Kind
      }
    
    
    type Kind = Enemy | Player 
    
    enemy1 = Mover 0 0 Enemy -- these are shortcuts to item creation
    player1 = Mover 2 2 Player 
    
    enemy x y = Mover x y Enemy -- if you prefer functions 
    
    player x y = Mover x y Player 
    

    【讨论】:

      猜你喜欢
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      相关资源
      最近更新 更多