【发布时间】:2016-07-12 09:44:13
【问题描述】:
我在 Elixir 的example 看到了这段代码:
defmodule Recursion do
def print_multiple_times(msg, n) when n <= 1 do
IO.puts msg
end
def print_multiple_times(msg, n) do
IO.puts msg
print_multiple_times(msg, n - 1)
end
end
Recursion.print_multiple_times("Hello!", 3)
我在这里看到用不同的参数定义了两次相同的函数,我想了解这种技术。
我可以将它们视为重载函数吗?
它是具有不同行为的单个函数还是这两个不同的函数,例如print_only_once 和print_multiple_times?
这些函数是否相互关联?
【问题讨论】:
-
这真的是关于模式匹配和保护子句。选择最适合参数的 函数实现,其中包括对
when保护子句的评估。是同一个功能,只是有多种实现方式。 -
无论您的函数有不同的签名,都可以,但请记住 - 当签名相同时,不允许不同的访问(def 或 defp)。
标签: functional-programming pattern-matching elixir arity