Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 在插件路由器中,init函数的作用是什么?_Elixir - Fatal编程技术网

Elixir 在插件路由器中,init函数的作用是什么?

Elixir 在插件路由器中,init函数的作用是什么?,elixir,Elixir,试图了解Plug,特别是Plug.Router。来自文档()。根据规范,插件有一个init函数,该函数在初始化时被调用以传入选项,但这些选项在定义的路由中似乎不可用 没有可用选项的原因是什么?是否有一种模式允许它存在?这是《编程凤凰》一书的摘录: “有时候,你可能需要菲尼克斯做一些繁重的工作来改变你的选择。这就是init函数的工作初始化在编译时发生。Plug将使用init的结果作为要调用的第二个参数。因为init经常在编译时调用,所以它是验证选项和准备一些工作的最佳场所。这样,通话速度就可以尽可

试图了解Plug,特别是Plug.Router。来自文档()。根据规范,插件有一个init函数,该函数在初始化时被调用以传入选项,但这些选项在定义的路由中似乎不可用


没有可用选项的原因是什么?是否有一种模式允许它存在?

这是《编程凤凰》一书的摘录:

“有时候,你可能需要菲尼克斯做一些繁重的工作来改变你的选择。这就是init函数的工作初始化在编译时发生。Plug将使用init的结果作为要调用的第二个参数。因为init经常在编译时调用,所以它是验证选项和准备一些工作的最佳场所。这样,通话速度就可以尽可能快。因为call是一个工作平台,所以我们希望它尽可能少做工作。"

例如,在routes.ex文件中使用插件

  pipeline :api do
    plug :accepts, ["json"]
    plug Example.Authenticated, repo: Example.Repo
  end
repo:Example.repo
是传递给Example.repo中的
init
函数的选项

defmodule Example.Authenticated do
  import Plug.Conn

  def init(opts) do 
   Keyword.fetch!(opts, :repo)
  end

  def call(conn, repo) do
   ...
  end

end

我假设在Plug.Router的情况下,编译时的修改可能是加载构建/修改路由的模块-可能来自外部源?取决于您试图完成的任务。

init函数的工作主要是使选项在编译时可用。然后将这些选项作为第二个论点


在我看来,我认为你可以根据插件功能或模块要完成的任务来决定是否有选项。

这应该是答案。我是Phoenix和plug的新用户,从在线文档中看编译时方面并不明显。我不明白为什么一个简单的测试日志功能没有被使用,但是因为它在编译时,所以这是有意义的。