我可以在这个 Elixir 匿名函数中避免元组参数吗?

Posted

技术标签:

【中文标题】我可以在这个 Elixir 匿名函数中避免元组参数吗?【英文标题】:Can I Avoid Tupled Parameters In This Elixir Anonymous Function? 【发布时间】:2014-02-27 16:54:51 【问题描述】:

我正在研究“Programming Elixir”,并且遇到了题为“Exercise: Functions 2”的练习。长话短说,基本上编写一个函数,如果前两个参数为 0,则发出 Fizzbuzz,如果第一个参数为 0,则发出 Fizz,如果第二个参数为 0,则发出 Buzz,如果前两个参数都不为零,则发出第三个参数。我想出了这个:

fizzbuzztest = fn
   0,0,_ -> "FizzBuzz"
   0,_,_ -> "Fizz"
   _,0,_ -> "Buzz"
   _,_,v -> "#v"
end

这样称呼:

fizzbuzztest.(0,0,8) # "FizzBuzz"

但我想知道——有没有什么方法可以做到这一点而不必对参数进行元组处理?似乎应该有某种方法可以传递三个参数并进行模式匹配,但我还没有找到它。欢迎那些对 Elixir 更有经验的人提出任何建议。

【问题讨论】:

【参考方案1】:

您可以通过以下方式解决这个特定的练习:

fizzbuzztest = fn
   0,0,_ -> "FizzBuzz"
   0,_,_ -> "Fizz"
   _,0,_ -> "Buzz"
   _,_,v -> "#v"
end

【讨论】:

不知道为什么我认为我需要对参数进行元组才能使其工作。谢谢。 fn 的早期示例并没有说明您可以像上面那样对参数进行模式匹配。几乎所有的格式都是a = fn(arg1, argn) end

以上是关于我可以在这个 Elixir 匿名函数中避免元组参数吗?的主要内容,如果未能解决你的问题,请参考以下文章

Elixir 中的命名函数和匿名函数有啥区别?

递归函数 集合 列表 元组

Elixir:来自函数的结构默认值

如何将匿名函数传递给 Elixir 中的管道

Elixir:模式匹配对元组和映射的工作方式不同

为啥元组在 Elixir 中不可枚举?