पिछले जवाब दोनों अच्छे हैं, एक के साथ चेतावनी: संरचना में चाबियाँ परमाणु हैं, आपके हैश में चाबियाँ तार हो सकती हैं। संरचना() विधि का उपयोग केवल मिलान की जाने वाली कुंजियों पर प्रतिलिपि करेगा, और तार परमाणुओं से मेल नहीं खाएंगे। उदाहरण:
defmodule User do
defstruct name: "john"
end
opts = %{"name" => "meg"}
user = struct(User, opts)
#=> %User{name: "john"}
मर्ज का उपयोग करना भी अजीब है, क्योंकि यह "पूर्ववत करें" होगा मानचित्र की struct प्रकृति:
user = Map.merge(%User{}, opts)
#=> %{:__struct__ => User, :name => "john", "name" => "meg"}
अमृत-लैंग बात Google समूह पर यह पाया जाता है, जोस से खुद को:
https://groups.google.com/d/msg/elixir-lang-talk/6geXOLUeIpI/L9einu4EEAAJ
कि काफी छोड़कर आप एक पास में सब कुछ कर सकते हैं जाने के लिए रास्ता नहीं है:
def to_struct(kind, attrs) do
struct = struct(kind)
Enum.reduce Map.to_list(struct), struct, fn {k, _}, acc ->
case Map.fetch(attrs, Atom.to_string(k)) do
{:ok, v} -> %{acc | k => v}
:error -> acc
end
end
end
आप कुंजी लागू की और/2' के बजाय सुनिश्चित करें कि वे नक्शा उपयोग में मौजूद 'struct बनाने के लिए चाहते हैं! है। – RusinaRange
मैं उलझन में हूँ। यह उत्तर किसी कीवर्ड सूची से संरचना के प्रारंभिकरण को दिखाता है। लेकिन सवाल एक मानचित्र से संरचना के बारे में पूछता है। –
समझ गया! 'संरचना/2' मानचित्र के लिए भी काम करता है। तो, 'opts =% {name: "meg"}' काम करता है। –