/ / Comment puis-je évaluer ou exécuter une interpolation de chaîne dans Elixir? - chaîne, élixir, interpolation de chaîne

Comment évaluer ou exécuter une interpolation de chaîne dans Elixir? - chaîne, élixir, interpolation de chaîne

Supposons que je construis une chaîne en utilisant sigil_S:

iex> s = ~S(#{1 + 1})
"#{1 + 1}"

Comment puis-je alors obtenir Elixir pour évaluer cette chaîne ou effectuer une interpolation, comme si j'avais entré le littéral "#{1 + 1}"?

En d'autres termes, comment puis-je l'obtenir pour évaluer "2"?

Je sais que je peux utiliser EEx à la place (par exemple EEx.eval_string "<%=1 + 1%>") mais je suis curieux de savoir s’il est possible de le faire en utilisant simplement une interpolation de chaîne "simple".

Réponses:

5 pour la réponse № 1

Les sceaux en minuscule prennent en charge l'interpolation. Plus à ce sujet ici:

Si le sigil est en minuscule (comme sigil_x), l'argument de chaîne autorisera l'interpolation. Si le sigil est en majuscule (comme sigil_X), la chaîne ne sera pas interpolée.

Donc, vous pouvez utiliser Sigil ~s pour évaluer l'interpolation en place:

~s(#{1 + 1}) #=> "2"
~S(#{1 + 1}) #=> "#{1 + 1}"

Ou vous pouvez simplement utiliser une interpolation de chaîne:

"#{1 + 1}" #=> "2"

Et, enfin, si vous voulez évaluer votre code écrit dans une variable chaîne, vous pouvez utiliser Code.eval_string / 3:

s = ""#{1 + 1}""               #=> ""#{1 + 1}""
s |> Code.eval_string |> elem(0)  #=> "2"

0 pour la réponse № 2

Vous devriez pouvoir utiliser le Code module qui a la fonction eval_string alors remplacez simplement EEx pour Code

Code.eval_string "1 + 1"

0 pour la réponse № 3

Bien que vous puissiez utiliser Code.eval_string/3:

{result, _} = Code.eval_string "1 + 1"
result
#⇒ 2

Le mot «interpolation» que vous avez utilisé dans la question me fait penser à ce que vous cherchiez simplement:

"#{1 + 1}"
#⇒ "2"

Sigil ~S s'échappe la chaîne donnée, c’est pourquoi vous avez échappé au panneau.