Ich weiß, dass es möglich ist, eine Struktur über zu erstellen %User{ email: '[email protected]' }
. Aber wenn ich eine Variable hätte, params = %{email: '[email protected]'}
gibt es eine Möglichkeit, diese Struktur mit dieser Variablen zu erstellen, z %User{ params }
.
Dies gibt einen Fehler aus und fragt sich nur, ob Sie ihn explodieren können oder auf andere Weise?
struct!/2
stattdessen.struct/2
funktioniert auch für eine Karte. Alsoopts = %{name: "meg"}
funktioniert.Die vorherigen Antworten sind beide gut, mit einer Einschränkung: Die Schlüssel in der Struktur sind Atome, die Schlüssel in Ihrem Hash können Zeichenfolgen sein. Bei Verwendung der struct () -Methode werden nur die übereinstimmenden Schlüssel kopiert, und Zeichenfolgen stimmen nicht mit den Atomen überein. Beispiel:
Die Verwendung von Merge ist ebenfalls seltsam, da dadurch die Struktur der Map "rückgängig gemacht" wird:
Fand dies in der elixir-lang-talk Google Group von Jose selbst:
https://groups.google.com/d/msg/elixir-lang-talk/6geXOLUeIpI/L9einu4EEAAJ
quelle
Eine andere Möglichkeit, dies zu tun
Map.merge/2
:Beispiel:
quelle