2016-03-29 9 views
0

私は動的に私のテンプレートで同様の構成要素を構築したいので、私は私のpage_view.exで、この再帰関数を作成しました:テンプレートに再帰関数を1回だけ印刷するのはなぜですか?

defmodule MyProject.PageView do 
    use FabricaASA.Web, :view 

defmodule Recursion do 
    def buildElements(element,n) when n <= 1 do 
    element 
    end 

    def buildElements(element, n) do 
    element 
    buildElements(element, n - 1) 
    end 
end 

end 

その後、私のテンプレートでは、私が使用してそれを呼び出す:

<%= MyProject.PageView.Recursion.buildElements("LOL", 4) %> 

問題があります

答えて

3

elementを単独で入力すると、最初の行にbuildElementの再帰バージョンがあり、最初の行に「操作なし」が表示されます。rと他の人が失われた。それらは、アキュムレータ(例えば、リスト)に一緒に収集されるべきである。ような何か:計算にリストのフォーマット/連結を行うよりも

def buildElements(element,n) when n <= 1 do 
    [element] # EDIT: Must be a list too 
end 
def buildElements(element, n) do 
    [element | buildElements(element, n - 1)] 
end 

さらに良い(私見)は、テンプレートでそれを反復処理することができます。

<%= for element <- MyProject.PageView.Recursion.buildElements("LOL", 4) do %> 
    <%= element %> 
<% end %> 
+0

ありがとうLauro。あなたの最初の半分はOKで、うまくいきますが、自分のテンプレート呼び出しを置き換えると(応答の後半 - 「さらに良い...」)、私は理解できないエラー(予期しないトークン「終わり」)を受け取りますなぜ... –

+0

ああ、私は 'のために逃した'の呼び出しの終わり。私は答えを更新しました。 –

+0

2番目の選択肢を試してみると、エラーが出ます: 'Enumに一致する関数節はありません。 ' - reduce/3-lists^foldl/2-0 - "/3'ビューの機能を変更する必要がありますか? –

関連する問題