首页 > 解决方案 > 如何将 atom 参数匹配到 cond 语句子句

问题描述

我想将以下功能放入一个功能中:

def discount(:standard), do: &standard/1
def discount(:bronze), do: &bronze/1
def discount(:silver), do: &silver/1
def discount(:gold), do: &gold/1

像这样的东西:

def discount(:rank) do
    cond do
        :standard -> &Shop.standard/1
        :bronze -> &Shop.bronze/1
        :silver -> &Shop.silver/1
        :gold -> &Shop.gold/1
    end
end

但是如何将函数参数:rank与 cond 语句中的原子进行匹配/比较?比较==对我也不起作用。

标签: elixirconditional-statements

解决方案


cond评估布尔条件。如果您想这样匹配,请使用case

def discount(rank) do
  case rank do
    :standard -> &Shop.standard/1
    :bronze -> &Shop.bronze/1
    :silver -> &Shop.silver/1
    :gold -> &Shop.gold/1
  end
end

推荐阅读