如何将atom参数与cond语句子句匹配

cod*_*ers 1 elixir conditional-statements

我想将以下函数放入一个函数中:

def discount(:standard), do: &standard/1
def discount(:bronze), do: &bronze/1
def discount(:silver), do: &silver/1
def discount(:gold), do: &gold/1
Run Code Online (Sandbox Code Playgroud)

像这样的东西:

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

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

sba*_*rob 5

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
Run Code Online (Sandbox Code Playgroud)