首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Phoenix视图-将选项参数添加到视图渲染/ 2,覆盖渲染/3的问题

Phoenix视图-将选项参数添加到视图渲染/ 2,覆盖渲染/3的问题
EN

Stack Overflow用户
提问于 2017-02-02 02:44:18
回答 1查看 630关注 0票数 0

为什么在尝试向视图render/2方法添加参数时会出现此错误。

代码语言:javascript
复制
def render("show.json", %{post: post}), do: render("show.json", %{post: post}, [user: true, room: true])
def render("show.json", %{post: post}, opts) do
  %{
    # stuff
    user: if(Keyword.fetch!(opts, :user), do: render_one(post.user, App.UserView, "show.json"), else: nil),
  }
end

错误:

代码语言:javascript
复制
imported Phoenix.View.render/3 conflicts with local function

我假设如果我与导入函数发生冲突,这是一件不好的事情。有没有更好的方法来传递选项,或者我可以用另一种方式解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2017-02-02 22:42:09

在Elixir中,您可以在不同的模块中拥有同名的函数,但不同的模块具有不同的复杂度。这就是为什么在我们的视图中,我们可以定义一个名为render的函数,其参数为2。render/2是Erlang和Elixir的约定。

也就是说,Phoenix.View定义了一个render/3函数。它将在所有视图中导入。因此Elixir编译器发现您正在定义一个与导入到模块中的函数具有相同名称和数量的函数,并发出警告。

这里唯一真正的解决方案是不调用你的函数render。建议的名称可以是render_with_options

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41987301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档