【发布时间】:2020-11-17 02:31:48
【问题描述】:
我目前正在尝试嵌入式 elixir(在我的情况下为 .html.eex 文件)。我知道如何渲染长生不老药哈希,但我不知道如何创建一个显示列表中所有项目的内容。在 Ruby 中,它会像这样工作:
<% array.each do |item| %>
<p> <%= item %> </p>
<% end %>
【问题讨论】:
我目前正在尝试嵌入式 elixir(在我的情况下为 .html.eex 文件)。我知道如何渲染长生不老药哈希,但我不知道如何创建一个显示列表中所有项目的内容。在 Ruby 中,它会像这样工作:
<% array.each do |item| %>
<p> <%= item %> </p>
<% end %>
【问题讨论】:
Elixir 等价物是
<%= for item <- list do %>
<p><%= item %></p>
<% end %>
请注意,您必须在 Elixir 中的 for 前面使用 <%=。
【讨论】:
我很好奇这是否可以使用 Enum 模块,因为 Patrick Oscity 的回答依赖于 Comprehensions,它看起来只是 Enum 模块的包装器。
答案是肯定的。我首先尝试使用Enum.each。神秘地只将ok 打印到屏幕上,但这就是Enum.each 所做的;它总是返回 :ok 原子。
我认为Enum.map 会更好,因为它会返回结果列表。看看:
<%= Enum.map(@list, fn(item) -> %>
<p><%= item %></p>
<% end) %>
EEx 的工作方式与ERB 几乎相同。在您的 ERB 示例中,您将类似于 lambda 或匿名函数的“块”传递给 each 函数。在我的EEx 示例中,fn (item) -> 代替了do |item|。
所以现在,您不仅可以迭代 Lists,还可以试验更多种类的函数,这些函数采用操纵模板的匿名函数。
【讨论】:
ERB 的东西非常相似 :) 不过有一件事 - 它应该是 <%= Enum.map(@list, fn(item) -> %> ;)