解释范围宏的扩展

时间:2017-02-11 13:30:15

标签: elixir phoenix-framework

Phoenix.Router手册页states

scope(path, options, list)

使用给定路径定义范围。

此功能是:

的快捷方式
scope path: path do
  ...
end

此宏调用中的一个参数是options。我认为该列表是以do开头并以end结尾的部分。有人可以解释options扩展到哪里?

1 个答案:

答案 0 :(得分:1)

是的,这里的list是一个包含[do: block]的单元素列表,其中blockdo ... end中的代码。这里的文档不是很清楚,但您可以read the source更好地理解这一点。

简而言之,如果选项是列表,path会插入options,所以:

scope(path, options, list)

相当于

scope([path: path] ++ options, list)

如果options是一个列表,并且相当于

scope([path: path, alias: options], list)

如果options是一个原子(被视为范围'别名)。

参数在文档中被命名为list的原因是函数顶部没有函数头声明,这使ex_doc推断出一个名称,并选择使用{{1}因为函数接受列表list作为最后一个参数。您可以阅读有关此here的更多信息。