2016-04-01 25 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

偉大的一面說明!這是我們閱讀的內容,但往往會忘記... –