从地图长生不老药中的列表中获取价值
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
我怎样才能做到这一点?
elixir 是不可变的,因此您的函数应该首先接收结构和 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
我有一个看起来像这样的结构:
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
我怎样才能做到这一点?
elixir 是不可变的,因此您的函数应该首先接收结构和 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