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