从地图长生不老药中的列表中获取价值

Get value from a list inside a map elixir

我有一个看起来像这样的结构:

defmodule WarGame.Core.Game do
 
  defstruct user_cards: [],
        croupier_cards: [],
        user_bets: [],
        bets: [:card_odd, :color_player],
        deck: %{},
        used: [],
        title: nil

我想创建一个函数,可以将列表中的选定元素移动到 user_bets。我怎么能做到这一点?此列表中只有有限 (5) 个元素。

在我看来是这样的:

def select_bet(bet) do
  finds bet in %WarGame.Core.Game{}.bets
  inserts it to %WarGame.Core.Game{}.user_bets
end

我怎样才能做到这一点?

是不可变的,因此您的函数应该首先接收结构和 bet。如果找到下注,它将 return 修改后的结构,否则为未修改的结构。

最简单的方法是检查 -- [bet] 是否修改了投注,如果是,则将投注添加到 user_bets

def select_bet(%WarGame.Core.Game{} = game, bet) do
  game_bets = game.bets # for the pin operator to work

  {bets, user_bets} =
    case game_bets -- [bet] do
      ^game_bets -> {game_bets, game.user_bets}
      bets -> {bets, [bet | game.user_bets]}
    end

  %WarGame.Core.Game{game | bets: bets, user_bets: user_bets}
end

或者,更简洁。

def select_bet(%WarGame.Core.Game{} = game, bet) do
  game_bets = game.bets # for the pin operator to work

  case game_bets -- [bet] do
    ^game_bets -> 
      game
    bets ->
      %WarGame.Core.Game{game |
        bets: bets, 
        user_bets: [bet | game.user_bets]}
  end
end