/ / Inspecter en arrière - convertir une chaîne en carte en élixir - élixir

Inspecter en arrière - convertir la chaîne en carte en élixir - élixir

Disons que j'ai une carte: %{a: "b"}. Je suis inspecting et obtenir "%{a: "b"}". Comment puis-je convertir cette chaîne sur la carte en élixir? Y a-t-il un moyen élégant?

Réponses:

2 pour la réponse № 1

Code.eval_string/3 vient à la rescousse:

iex(1)> {map, _binding} = Code.eval_string "%{a: "b"}"
{%{a: "b"}, []}
iex(2)> map
%{a: "b"}

0 pour la réponse № 2

En général, vous ne pouvez pas. Par exemple, supposons que vous ayez un pid en tant que valeur ou clé. Lorsque vous déshydratez votre chaîne en une carte, le pid peut même ne pas exister.

Il n'y a aucune installation (à ma connaissance) qui existe dans l'élixir pour permettre cela.

Mais vous pouvez toujours encoder votre carte en json et décoder à tout moment. Sauf les références transitoires, cela devrait fonctionner.


0 pour la réponse № 3

Il existe des fonctions qui vous permettent de marshal / unmarshal Elixir types de données dans :erlang.term_to_binary et :erlang.binary_to_term. La chaîne binaire peut ensuite être écrite dans un fichier pour une utilisation ultérieure. Cependant, le fichier binaire résultant n’est pas très lisible.

Le protocole d’inspection est destiné aux humains pour lireet non de marshal des structures de données. Peut-être que si vous évitez les pièges évidents des types opaques tels que Pid ou Reference et les listages incomplets, le truc Code.eval_string peut fonctionner, mais je me méfie de le faire dans le cas général.