Elixir 函数作为参数——这里发生了什么?

Elixir 函数作为参数——这里发生了什么?,elixir,Elixir,我正在经历一些长生不老药的Koan,我对这些代码行中发生的事情感到有点困惑 def乘以五,然后(数字,乐趣),做:乐趣。(数字*5) def方形(编号),do:编号*编号 koan“您可以将函数作为参数传递。在名称前放置一个“&”,并说明arity”do 断言时间_五_和_然后(2,&平方/1)=___ 结束 对于\uuuuuuuu,正确答案是100。但我不知道如何或为什么,有人能清楚地说出发生了什么吗?&是操作员&square/1表示“捕获名为square的函数,该函数具有arity 1(简

我正在经历一些长生不老药的Koan,我对这些代码行中发生的事情感到有点困惑

def乘以五,然后(数字,乐趣),做:乐趣。(数字*5)
def方形(编号),do:编号*编号
koan“您可以将函数作为参数传递。在名称前放置一个“&”,并说明arity”do
断言时间_五_和_然后(2,&平方/1)=___
结束
对于
\uuuuuuuu
,正确答案是100。但我不知道如何或为什么,有人能清楚地说出发生了什么吗?

&
是操作员
&square/1
表示“捕获名为
square
的函数,该函数具有arity 1(简单英语中的arity 1:接受单个参数)”

乘以五,然后(2,&square/1)
这意味着“调用
乘以五次,然后用数字
2
调用
函数,并捕获函数
平方
(具有算术1)”

存储在变量中的函数称为匿名函数(因为它没有名称,不像用
def
关键字定义的函数)。可以使用
&
捕获运算符将命名函数捕获为匿名函数,这就是示例中的情况

乘以五次,然后/2
调用其参数
number
fun
fun
参数是一个包含匿名函数的变量。该函数可以是任何函数,但在您的示例中,它恰好是
square/1
函数的捕获。调用匿名函数的语法是
variable\u name.(args)
。在这种情况下,
fun.(数字*5)
就是这样。正在使用参数
number*5
调用存储在
fun
中的函数

让我们看看
times\u five\u和\u then/2的实现:

def乘以五,然后(数字,乐趣),做:乐趣。(数字*5)
这将获取
fun
参数,并使用
number
参数乘以
5
调用它包含的函数。发生的事情的细目:

  • 定义了一个名为
    square/1
    的函数,用于对其参数进行平方运算
  • 平方函数被捕获为匿名函数,并作为第二个参数传递给
    times\u five\u和\u then/2
    函数
  • times\u five\u和_then/2
    函数将捕获的函数绑定到
    fun
    变量
  • 乘以五,然后/2
    函数将其第一个参数(称为
    number
    )乘以五
  • times\u-five\u和/u-then/2
    函数调用存储在
    fun
    中的匿名函数(这是
    square/2
    函数的捕获),并得到上述乘法的结果
  • 返回
    fun
    中函数的执行结果
  • 或者换句话说,
    2
    乘以
    5
    ,然后传递给
    square/2
    函数的捕获,该函数对其进行平方运算,得到
    100
    &
    是运算符
    &square/1
    表示“捕获名为
    square
    的函数,该函数具有arity 1(简单英语中的arity 1:接受单个参数)”

    乘以五,然后(2,&square/1)
    
    这意味着“调用
    乘以五次,然后用数字
    2
    调用
    函数,并捕获函数
    平方
    (具有算术1)”

    存储在变量中的函数称为匿名函数(因为它没有名称,不像用
    def
    关键字定义的函数)。可以使用
    &
    捕获运算符将命名函数捕获为匿名函数,这就是示例中的情况

    乘以五次,然后/2
    调用其参数
    number
    fun
    fun
    参数是一个包含匿名函数的变量。该函数可以是任何函数,但在您的示例中,它恰好是
    square/1
    函数的捕获。调用匿名函数的语法是
    variable\u name.(args)
    。在这种情况下,
    fun.(数字*5)
    就是这样。正在使用参数
    number*5
    调用存储在
    fun
    中的函数

    让我们看看
    times\u five\u和\u then/2的实现:

    def乘以五,然后(数字,乐趣),做:乐趣。(数字*5)
    
    这将获取
    fun
    参数,并使用
    number
    参数乘以
    5
    调用它包含的函数。发生的事情的细目:

  • 定义了一个名为
    square/1
    的函数,用于对其参数进行平方运算
  • 平方函数被捕获为匿名函数,并作为第二个参数传递给
    times\u five\u和\u then/2
    函数
  • times\u five\u和_then/2
    函数将捕获的函数绑定到
    fun
    变量
  • 乘以五,然后/2
    函数将其第一个参数(称为
    number
    )乘以五
  • times\u-five\u和/u-then/2
    函数调用存储在
    fun
    中的匿名函数(这是
    square/2
    函数的捕获),并得到上述乘法的结果
  • 返回
    fun
    中函数的执行结果

  • 或者换句话说,
    2
    乘以
    5
    ,然后传递到
    square/2
    函数的捕获,该函数将其平方,得到
    100

    你是指这个意义上的koan吗?你是指这个意义上的koan吗?哇,这是一个惊人的分解。谢谢你花时间来表达!哇,这真是一个惊人的崩溃。谢谢你花时间来表达!