繁体   English   中英

elixir 函数使用 do 参数

[英]elixir function taking a parameter with do

我试图全神贯注于 Elixir 并且对以下内容感到困惑

def fun_myfunc(clause, do: expression) do

具体来说,我对do: expression部分有点困惑。 这是传递给函数的参数吗,还有为什么有一个: do是这个上下文中的关键字吗?

这也引发了以下关于Phoenix的问题。 如果我查看管道函数https://hexdocs.pm/phoenix/Phoenix.Router.html#pipeline/2我会看到以下签名pipeline(plug, list) 什么是list在这种情况下以及我如何通过查看文档来推断它。 我知道他们已经给出了list看起来像一堆表达式的示例,但是我如何通过查看文档来收集它。

do: expression是一个关键字列表 这是两种形式的语法糖:

  • 作为函数的最后一个参数,可以省略周围的[]
  • 作为关键字列表,您可以编写key: value而不是等效的{:key, :value}

这两个都记录在上面的链接中。

该函数等效于:

def fun_myfunc(clause, [{:do, expression}]) do

:do只是一个原子。 fun_myfunc决定如何处理它。

我怀疑您实际上是在查看用defmacro定义的宏,并在您的问题中错误地引用了它。 例如,这也是if的工作方式。

if foo do bar else baz相当于if(foo, do: bar, else: baz) ,相当于if(foo, [{:do, bar}, {:else, baz}])

至于凤凰部分,那应该是一个单独的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM