【问题标题】:Unable to pass correctly an argument in a template无法在模板中正确传递参数
【发布时间】:2016-04-15 20:49:54
【问题描述】:

我在“web/templates/module/headerHC.html.eex”中有这个:

   <%= for element <- MyProject.PageView.Recursion.buildElements(@header_linkNumber),1) do %>
            <%= element %>
   <% end %>

然后,我在“web/layout/HC.html.eex”中使用这个组件:

<%= render FabricaASA.ModuleView, "headerHC.html", conn: @conn,
    header_class: nil,
    header_linkNumber: "3"
%>

最后我在“web/views/page_view.ex”里面定义了:

defmodule Recursion do
        def buildElements(n) when n <= 1 do
            [n]
        end
        def buildElements(n) do
            [n | buildElements(n - 1)]
        end
    end

问题是我收到了这个错误:

bad argument in arithmetic expression 指向这一行:

def buildElements(n) when n <= 1 do

当我插入 @header_linkNumber 而不是像 &lt;%= for element &lt;- MyProject.PageView.Recursion.buildElements(2),1) do %&gt; 这样的数字时会发生这种情况

我已经尝试改用@MyProject.ModuleView.header_linkNumber,但随后出现此错误:

cannot set attribute @__aliases__ inside function/macro

【问题讨论】:

  • 您是否使用 header_linkNumber 作为 buildElements 的参数?如果是这样,您应该通过3 而不是"3"
  • 对!我错过了那里的字符串......谢谢Gazler(请回答)。

标签: elixir phoenix-framework


【解决方案1】:

当你从一个字符串中减去一个整数时,你会得到“算术表达式中的错误参数”:

iex> "3" - 1 
** (ArithmeticError) bad argument in arithmetic expression
    :erlang.-("3", 1)

变化:

header_linkNumber: "3"

收件人:

header_linkNumber: 2

作为一个有趣的附注,您实际上可以将字符串与整数进行比较:

iex> "3" <= 1
false

您应该注意这一点,因为如果您在其他地方使用字符串而不是整数,这可能会导致意外错误。

订单(来自http://elixir-lang.org/getting-started/basic-operators.html)是:

number

【讨论】:

    猜你喜欢
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 2016-04-26
    相关资源
    最近更新 更多