Шаблон, соответствующий карте внутри карты в заголовке функции

В настоящее время у меня есть экземпляр params, который выглядит так:

  params: %{
    "continent" => %{
      "deleted_date" => nil,
      "name" => "Asia",
      "to_be_deleted" => true
    },
    "id" => "16"
  },

Я пытаюсь сопоставить шаблон с ключом to_be_deleted, так что, если это правда, будет работать другая версия update/2, а также назначать содержимое continents для continent_params

Мой текущий update/2:

  def update(conn, %{"id" => id, "continent" => continent_params}) do
    # stuff         
  end

Моя попытка сопоставить образец с другой версией:

  def update(conn, %{"id" => id, %{"to_be_deleted" = true} => continent_params}) do
    #stuff
  end

Однако это выдает предупреждение о синтаксисе относительно }, которое я не могу очистить. Я не уверен, пытаюсь ли я сделать слишком много в заголовке функции или мне следует использовать другой синтаксис для доступа к «карте внутри карты».


person Sorvah    schedule 25.02.2019    source источник


Ответы (1)


Попробуйте так:

def update(conn, %{"id" => id, "continent" => %{"to_be_deleted" = true} = continent_params}) do
  #stuff                       ^
end

Вы забыли сопоставить шаблон с ключом "continent".

person vahid abdi    schedule 25.02.2019
comment
Вы абсолютно правы. Мне также пришлось исправить собственную опечатку для %{"to_be_deleted" => true}. Я не сопоставлялся с "continent", потому что в моей голове я думал: «Не пытайтесь использовать континент.to_be_deleted, вы не пишете JS! - person Sorvah; 25.02.2019