内容简介:在深入捕获操作符之前,让我们先熟悉匿名函数和arity。例子如下:
& 是Elixir的捕获操作符,常用来捕获和创建匿名函数。
匿名函数和arity
在深入捕获操作符之前,让我们先熟悉匿名函数和arity。
例子如下:
add_one = fn x -> x + 1 end
我们定义了一个函数,但是它没有被绑定一个全局名字,所以它是一个匿名函数或者是一个lambda表达式。
这个函数有一个参数,所以它的arity是1。
如何用 &
捕获函数
我们先来谈谈捕获函数。捕获就意味着 & 将一个函数转成匿名函数,这个匿名函数可以被当作参数传递给其他函数,或者被绑定到一个变量。
& 可以捕获两种类型的函数:
- 模块中给定名称和arity的函数
使用的方式: &(module_name.function_name/arity) ,例如:
speak = &(IO.puts/1)
speak.("hello") # hello
我们从 IO 模块捕获 puts 函数并且将它绑定到局部变量 speak 上。
- 局部函数
如下例子中, put_in_columns 和 put_in_one_row 被定义在相同的模块里,因此我们可以用 &put_in_one_row/1 来捕获 put_in_one_row ,注意,我们在此没有包含模块名。
defmodule Issues.TableFormatter do
def put_in_columns(data_by_columns, format) do
Enum.each(data_by_columns, &put_in_one_row/1)
end
def put_in_one_row(fields) do
# Do some things...
end
end
创建匿名函数
捕获操作符也可以用来创建匿名函数,例如:
add_one = &(&1 + 1) add_one.(1) # 2
上述例子和下面的效果一样:
add_one = fn x -> x + 1 end add_one.(1) # 2
你可以注意到第一个例子里用了 &1 。它叫做值占位符,它标识了这个函数的第几个参数,此例中就是第一个参数。
另外, {} 和 [] 在Elixir里也是操作符, & 也可以和它们一起使用。
return_list = &[&1, &2]
return_list.(1, 2) # [1, 2]
return_tuple = &{&1, &2}
return_tuple.(1, 2) # {1, 2}
一开始很难理解,我们只需要从另一个角度来思考,如下图:
原文链接: https://dockyard.com/blog/2016/08/05/understand-capture-operator-in-elixir
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Computer Age Statistical Inference
Bradley Efron、Trevor Hastie / Cambridge University Press / 2016-7-21 / USD 74.99
The twenty-first century has seen a breathtaking expansion of statistical methodology, both in scope and in influence. 'Big data', 'data science', and 'machine learning' have become familiar terms in ......一起来看看 《Computer Age Statistical Inference》 这本书的介绍吧!
图片转BASE64编码
在线图片转Base64编码工具
html转js在线工具
html转js在线工具