【问题标题】:How can I pattern match on this?我该如何进行模式匹配?
【发布时间】:2016-09-05 15:53:05
【问题描述】:

我有这样的表达方式:

obj1 = Repo.get_by(Struct1, var1: "123")

如何对其进行模式匹配,以便它检查记录是否存在以及其字段“var2”是否为 nil。是否可以进行模式匹配 在那呢?

现在我正在这样做:

  cond obj1 do
    obj11  && (obj11.var2 == nil) -> #....
    true -> # doesn't exist or var2 isn't nil
  end

【问题讨论】:

    标签: pattern-matching elixir phoenix-framework


    【解决方案1】:

    你可以使用%Struct1{var2: nil}的模式:

    case Repo.get_by(Struct1, var1: "123") do
      %Struct1{var2: nil} -> #...
      _ -> #...
    end
    

    【讨论】:

    • 我可以将“%Struct1{var2: nil}”绑定到一个变量吗? my_var@%Struct1{var2: nil} 之类的东西,无需在模式匹配之前创建变量?
    • @darko,是的:my_var = %Struct1{var2: nil} -> #....
    • 如果 Struct1 有多个字段,我应该在 %Struct1{_, var2: nil} 中使用 _ 还是不需要?
    • @darko 您不需要,因为映射模式会忽略匹配值上的额外字段(%{a: 1} 匹配 %{a: 1, b: 2})。此外,该代码无法编译,并且没有明确忽略字段的语法,因为它不是必需的。
    猜你喜欢
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多