内容简介:在深入捕获操作符之前,让我们先熟悉匿名函数和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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Android RxJava 操作符详解系列:条件 / 布尔操作符
- C语言中点操作符(.)和箭头操作符(->)的不同之处
- JavaScript骚操作之操作符
- JS操作符拾遗
- 浅谈JavaScript位操作符
- rxjs switchMap操作符
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Beginning ARKit for iPhone and iPad
Wallace Wang / Apress / 2018-11-5 / USD 39.99
Explore how to use ARKit to create iOS apps and learn the basics of augmented reality while diving into ARKit specific topics. This book reveals how augmented reality allows you to view the screen on ......一起来看看 《Beginning ARKit for iPhone and iPad》 这本书的介绍吧!