今天的Erlang Thursday讲 erlang:apply/3.
在函数式语言里,我们喜欢将函数当做第一等公民看待将它在程序中传递。但是有些时候,我们并不知道我们将要调用哪一个函数,从而导致我们不确定函数的参数是什么。如果我们知道要调用哪个函数,我们只需像这样 Fun(Arg1, Arg2, …, ArgN) 来调用,但是如果我们遇到有不同参数数量的场景就没法这么干了。怎么办?还是让我们进入今天的主题:erlang:apply/3 。
erlang:apply/3,三个入参分别是模块名、函数名、一个要传给函数的实参组成的列表。传给erlang:apply/3的函数必需也是被导出的,否则将有错误发生。
|
|
Erlang的官方文档特别指出,erlang:apply/3仅仅是在我们不完全清楚函数的参数数量的时候来使用。否则我们只需按平常的函数调用来做,即使以匿名函数的方式来传递。
|
|
erlang模块也包括另一个版本 erlang:apply/2 ,第一个入参是一个函数,第二个人才是这个函数的实参的列表。
|
|
erlang:apply/2 和 erlang:apply/3 并不是我们的通常用法,它在一些特殊场合,它是必要的,比如上星期的 timer:tc 。虽然我们将很少用到它,但是了解它对我们也有帮助。
原文链接: https://www.proctor-it.com/erlang-thursday-erlang-apply-3/