为什么我的递归函数在我的模板中只打印一次?
Why is my recursive function printing just once in my template?
我想在我的模板中动态构建类似的组件,所以我在 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 个...
当您单独放置 element
时,buildElement 的递归版本在第一行有一个 "no operation",导致仅返回一个项目而其他项目丢失。它们应该一起收集在一个累加器中,例如一个列表。类似于:
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
甚至比在计算中执行列表的 formatting/concatenation 更好(恕我直言),您可以在模板中对其进行迭代。
<%= for element <- MyProject.PageView.Recursion.buildElements("LOL", 4) do %>
<%= element %>
<% end %>
我想在我的模板中动态构建类似的组件,所以我在 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 个...
当您单独放置 element
时,buildElement 的递归版本在第一行有一个 "no operation",导致仅返回一个项目而其他项目丢失。它们应该一起收集在一个累加器中,例如一个列表。类似于:
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
甚至比在计算中执行列表的 formatting/concatenation 更好(恕我直言),您可以在模板中对其进行迭代。
<%= for element <- MyProject.PageView.Recursion.buildElements("LOL", 4) do %>
<%= element %>
<% end %>