为什么我的递归函数只在我的模板中打印一次?

时间:2016-03-29 09:00:23

标签: phoenix-framework

我想在模板中动态构建类似的组件,所以我在page_view.ex创建了这个递归函数:

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) %>

问题是我只得到一个LOL而不是4个......

1 个答案:

答案 0 :(得分:4)

buildElement的递归版本有一个&#34;无操作&#34;在单独放置element时的第一行,导致只返回一个项目而其他项目丢失。它们应该在累加器中一起收集,例如列表。类似的东西:

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 %>