你怎么知道Elixir的功能来自哪里?

时间:2017-01-05 19:23:59

标签: elixir

例如,assign未在此模块中的任何位置定义。您还可以看到use s Phoenix.Channel,但在任何地方都没有定义assign。结果assignPhoenix.Socket中定义,我知道的唯一原因是因为在Phoenix.Socket中定义了一个名为channel的宏,它使用{{1} }}。显然,不知何故,这会给Phoenix.LiveReload.Channel Phoenix.LiveReload.Channel函数。

除了assign之外,你应该如何追踪那个逻辑?就像,如果我只是看grep,我怎么知道Phoenix.LiveReload.Channel来自哪里?

1 个答案:

答案 0 :(得分:2)

这是创作者Jose Valim的回应:

  

Elixir导入和别名是词法,这意味着您未定义的模块中出现的任何内容都必须已在代码中显式导入。因此,寻找使用Mod或导入Mod是从函数的来源找到的方法。   此规则的唯一例外是默认情况下导入的内核模块。