2016-04-01 27 views
0

我这里面的“网页/模板/模块/ headerHC.html.eex”:无法正确地传递参数在模板

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

然后,我在“网络/设计/ HC使用该组件.html.eex“:

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

最后我里面定义的 ”网页/视图/ 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 
+0

你使用header_linkNumber作为参数buildElements?如果是这样,你应该通过'3'而不是''3“' – Gazler

+0

对!我错过了那里的字符串......感谢Gazler(请给出答案)。 –

回答

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

+0

伟大的一面说明!这是我们阅读的内容,但往往会忘记... –