2015-02-11 12 views
7

Ich probiere derzeit eingebettete Elixier (in meinem Fall .html.eex-Dateien). Ich weiß, wie man Elixier-Hashes rendert, aber ich konnte nicht herausfinden, wie ich einen Inhalt mit allen Elementen in einer Liste erstelle. In Ruby würde es so funktionieren:Iterate über Liste in eingebettetem Elixir

<% array.each do |item| %> 
    <p> <%= item %> </p> 
<% end %> 

Antwort

18

Das Elixier entspricht

<%= for item <- list do %> 
    <p><%= item %></p> 
<% end %> 

Beachten Sie, dass Sie eine <%= vor dem for in Elixir verwenden.

+0

"for Schleife braucht a ="? Du meinst <% = auf dem Eröffnungs-Tag? –

+1

Ja, das öffnende Tag! –

+0

Ich habe versucht, es klarer zu machen. Sie können gerne eine Änderung vorschlagen, wenn Sie eine bessere Möglichkeit finden, dies auszudrücken! :) –

2

Ich war neugierig, ob dies mit dem Enum Modul möglich war, da Patrick Oscitys Antwort Comprehensions ist, die nur ein Wrapper für das Enum Modul zu sein scheint.

Die Antwort ist ja. Ich versuchte es zuerst mit Enum.each. Was mysteriös nur ok auf den Bildschirm gedruckt, aber das ist, was Enum.each tut; es gibt immer das Atom :ok zurück.

Ich dachte, Enum.map wäre ein besserer Schuss, da es eine Liste der Ergebnisse zurückgibt. Werfen Sie einen Blick:

<%= Enum.map(@list, fun(item) -> %> 
    <p><%= item %></p> 
<% end) %> 

EEx fast die gleiche wie ERB funktioniert. In Ihrem ERB Beispiel übergaben Sie einen "Block", der analog zu einer Lambda oder anonymen Funktion ist, an die each Funktion. In meinem Beispiel EEx tritt die fn (item) -> an die Stelle do |item|.

So, jetzt können Sie nicht nur über Lists iterieren, aber Sie können mit einer größeren Vielfalt von Funktionen experimentieren, die eine anonyme Funktion verwenden, die die Vorlage manipuliert.