在我的模板中迭代具有两个参数的函数时出错

Error when iterating over a function with two arguments in my template

在我看来,我有一个函数可以用来在我的模板中动态构建 HTML 元素:

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

它工作得很好,除非我尝试在我的模板中迭代它:

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

我收到这个错误:

no function clause matching in Enum."-reduce/3-lists^foldl/2-0-"/3

有什么问题?

只需一点小改动就可以解决您的问题。

您尝试使用 [foo | bar] 符号向列表中添加元素。 bar 必须是列表,而 foo 是单个项目。

将您的 element 更改为 [element] 即可完成。

def buildElements(element,n) when n <= 1 do
  [element]
end

def buildElements(element, n) do
  [element | buildElements(element, n - 1)]
end