gpt4 book ai didi

function - 有没有办法返回一个可以有多个参数的乐趣?

转载 作者:行者123 更新时间:2023-12-03 22:21:06 26 4
gpt4 key购买 nike

Erlang 函数可以共享相同的名称但具有不同的元数。例如:

name(X) -> X.
name(X,Y) -> X * Y.

我希望能够从以相同方式运行的函数中返回一个乐趣。

在这个例子中,我想要一种方法来返回 fun/1 和 fun/2 作为一个返回值,所以返回的 fun 可以用任何一种方式调用,就像上面的函数示例一样。

function() ->
fun(X) -> X end,
fun(X,Y) -> X * Y end.

我可以返回一个元组 {F1, F2} 但这很难用。

我可以返回一个将列表作为参数的函数,但对于 F([X]) 或 F([X, Y]) 之类的调用,这也相当难看。

最佳答案

这里有两个同名的不同函数:

name(X) -> X.
name(X,Y) -> X * Y.

这两个函数作为匿名函数,分别是:fun name/1fun name/2

如果你把它们中的任何一个放在一个变量中,比如...... F1 = fun name/1F2 = fun name/2,你将无法使用这些变量以后可互换,因为 F1(1) 可以工作,但是 F1(1,2) 会失败(反之亦然 F2).

如果您不知道在运行时将收到的参数数量(假设您收到一个可变长度的参数列表),那么您将需要使用 erlang:apply/2 or erlang:apply/3动态评估功能。在这种情况下,我可以为您提供两种方式(取决于您喜欢的 erlang:apply 版本):

应用/2:

use_name(Args) ->
Fun = function(length(Args)),
erlang:apply(Fun, Args).

function(1) -> fun(X) -> X end;
function(2) -> fun(X, Y) -> X * Y end.

应用/3:

use_name(Args) ->
erlang:apply(?MODULE, name, Args).

name(X) -> X.
name(X,Y) -> X * Y.

希望这对您有所帮助。

关于function - 有没有办法返回一个可以有多个参数的乐趣?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58027113/

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