无法在模板中正确传递参数

Unable to pass correctly an argument in a template

我里面有这个"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 而不是像 <%= for element <- MyProject.PageView.Recursion.buildElements(2),1) do %>

这样的数字时会发生这种情况

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

cannot set attribute @__aliases__ inside function/macro

当您从字符串中减去一个整数时,您将得到 "bad argument in arithmetic expression":

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 < atom < reference < functions < port < pid < tuple < maps < list < bitstring