【问题标题】:Pattern matching a map within a map in the function header模式匹配函数头中映射内的映射
【发布时间】:2019-02-25 18:38:40
【问题描述】:

我目前有一个如下所示的 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

但是,这会产生关于 } 的语法警告,我无法清除。我不确定我是否要在函数头中做太多事情,或者我是否应该使用不同的语法来访问“地图中的地图”。

【问题讨论】:

    标签: elixir phoenix-framework


    【解决方案1】:

    试试这个方法:

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

    您忘记对 "continent" 键进行模式匹配。

    【讨论】:

    • 你是绝对正确的。我还必须更正我自己对%{"to_be_deleted" => true} 的错字。我没有与"continent" 匹配,因为在我的脑海中我在想“不要尝试使用continent.to_be_deleted,你不是在写JS”!
    猜你喜欢
    • 2021-06-22
    • 2018-01-09
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    相关资源
    最近更新 更多