gpt4 book ai didi

elixir - 匿名函数不能混合子句

转载 作者:行者123 更新时间:2023-12-01 07:36:15 24 4
gpt4 key购买 nike

我创建了一个如下所示的模块:

defmodule Sum do

def sum(x,y) do
x + y
end

def sum(x) do
x
end

end

它当然可以像我预期的那样使用模式匹配:
iex(2)> Sum.sum(3)
3
iex(3)> Sum.sum(3,5)
8

当我定义一个匿名函数时:
iex(1)> sum = fn
...(1)> x, y -> x + y
...(1)> x -> x
...(1)> end
** (CompileError) iex:1: cannot mix clauses with different arities in function definition

然后编译器提示。为什么我不能与不同的 arities 混合使用,上面的示例带有模块,它就像一个魅力。

最佳答案

sum/2sum/1实际上是2个不同的功能。被执行的不是由模式匹配选择的。编译器根据您指定的参数数量知道要调用哪一个。

正如其他人所指出的,匿名函数可能有不同的子句,但它们必须具有相同的数量,因为您只是创建一个函数。

考虑以下代码:

defmodule Sum do

def sum(x,y) where is_integer(y) do
x + y
end

def sum(x,_) do
x
end

end

这将创建单个 sum/2 的 2 个子句函数和调用哪个函数将由模式匹配和保护子句确定,如下所示:
iex> Sum.sum(3,nil)
3
iex> Sum.sum(3,5)
8
iex> Sum.sum(5,:foo)
5

您可以使用匿名函数做同样的事情。

关于elixir - 匿名函数不能混合子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35466618/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com