什么是使用捕获语法传递的内核函数?
What is a Kernel function passed using capture syntax?
我正在尝试了解 Elixir 和 Kernel。 + / 2 函数有效,有人可以用一些用法示例来解释吗?我试图理解以下函数,但我不清楚。
def multiple_three_five do
1..999
|> Enum.filter(fn(n) -> rem(n, 3) == 0 or rem(n, 5) == 0 end)
|> Enum.reduce(&Kernel.+/2)
|> IO.puts
end
如果您在 IEx
,您可以使用 h
回调来显示模块或函数等的文档。试一试,很有帮助!
即:
iex(1)> h Kernel.+
# the documentation will be displayed here
除了文档中已有的内容外,没有太多要添加的内容。基本上,Kernel.+/2
用于将两个数字相加。
您可以这样调用 Kernel.+/2
函数:
1 + 1
如果你觉得更花哨,也可以点赞:
Kernel.+(1, 1)
除了@ryanzidago的回答,语法&<module>.<function>/<arity>
是将命名函数转换为匿名函数。 Arity 代表函数可以采用的参数数量。此功能通常被称为“捕获”,我不太明白为什么这样命名。
例如,
&String.to_integer/1
与
工作方式相同
fn str ->
String.to_integer(str)
end
可能会快一点。
&Kernel.+/2
与
工作方式相同
fn a, b ->
Kernel.+(a, b)
end
或
fn a, b -> a + b end
顺便说一句,如果命名函数(public或不在当前模块中),您可以省略<module>.
部分。
我正在尝试了解 Elixir 和 Kernel。 + / 2 函数有效,有人可以用一些用法示例来解释吗?我试图理解以下函数,但我不清楚。
def multiple_three_five do
1..999
|> Enum.filter(fn(n) -> rem(n, 3) == 0 or rem(n, 5) == 0 end)
|> Enum.reduce(&Kernel.+/2)
|> IO.puts
end
如果您在 IEx
,您可以使用 h
回调来显示模块或函数等的文档。试一试,很有帮助!
即:
iex(1)> h Kernel.+
# the documentation will be displayed here
除了文档中已有的内容外,没有太多要添加的内容。基本上,Kernel.+/2
用于将两个数字相加。
您可以这样调用 Kernel.+/2
函数:
1 + 1
如果你觉得更花哨,也可以点赞:
Kernel.+(1, 1)
除了@ryanzidago的回答,语法&<module>.<function>/<arity>
是将命名函数转换为匿名函数。 Arity 代表函数可以采用的参数数量。此功能通常被称为“捕获”,我不太明白为什么这样命名。
例如,
&String.to_integer/1
与
工作方式相同fn str ->
String.to_integer(str)
end
可能会快一点。
&Kernel.+/2
与
工作方式相同fn a, b ->
Kernel.+(a, b)
end
或
fn a, b -> a + b end
顺便说一句,如果命名函数(public或不在当前模块中),您可以省略<module>.
部分。