Nano Hash - криптовалюты, майнинг, программирование

Аргументы карты в функциях

Я изучаю эликсир, и одна вещь, которую я не понимаю, стиль, в котором вы видите, что карты являются аргументами в функции. Чаще всего вы видите это в таких контроллерах:

CONTROLLER
def create(conn, %{"league" => league_params}) do
  league = %League{}
    |> League.changeset(league_params)
    |> Repo.insert()

  case league do
    {:ok, league} ->
      conn
      |> put_flash(:info, "League Created Successfully.")
      |> redirect(to: page_path(conn, :index))
    {:error, %Ecto.Changeset{} = changeset} ->
      render(conn, "new.html", changeset: changeset)
  end
end

Итак, функция create/2. Второй аргумент выглядит так %{"league" => league_params}. Поправьте меня, если я ошибаюсь, но это карта, так почему же мы ссылаемся на значение ниже League.changeset(league_params) вместо ключа League.changeset("league")?

Это может показаться глупым вопросом, но я не могу понять его и не могу найти документы для этого вопроса. Спасибо за помощь.


Ответы:


1

В шаблоне карты ключи — это значения, которые должны соответствовать ключу карты, а значение — это шаблон, к которому привязывается значение этого ключа. Например, шаблон %{"foo" => x} будет успешно сопоставлен с картой %{"foo" => 123}, и в результате сопоставления переменная x будет привязана к 123.

Точно так же в вашем примере league_params будет привязано к значению ключа "league" карты params, поэтому league_params передается в набор изменений. Код почти эквивалентен выполнению def create(conn, params), а затем league_params = params["league"] в теле функции. (Почти потому, что если значение не существует, сопоставление шаблона не удастся, но этот код установит league_params в nil.)

21.11.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..