Ali*_*ael 3 string elixir string-interpolation
假设我使用sigil_S以下方法构造一个字符串
iex> s = ~S(#{1 + 1})
"\#{1 + 1}"
Run Code Online (Sandbox Code Playgroud)
然后我如何让Elixir评估该字符串或执行插值,就像我输入了字面值一样"#{1 + 1}"?
换句话说,我该如何评价"2"呢?
我知道我可以使用EEx(例如EEx.eval_string "<%=1 + 1%>"),但我很好奇是否有办法只使用'普通'字符串插值.
小写符号支持插值.更多关于它在这里:
如果sigil是小写(例如sigil_x),则字符串参数将允许插值.如果sigil是大写(例如sigil_X),则不会插入字符串.
因此,您可以使用sigil ~s来评估插值:
~s(#{1 + 1}) #=> "2"
~S(#{1 + 1}) #=> "\#{1 + 1}"
Run Code Online (Sandbox Code Playgroud)
或者你可以简单地使用字符串插值:
"#{1 + 1}" #=> "2"
Run Code Online (Sandbox Code Playgroud)
最后,如果要评估动态写入字符串变量的代码,可以使用Code.eval_string/3:
s = "\"\#{1 + 1}\"" #=> "\"\#{1 + 1}\""
s |> Code.eval_string |> elem(0) #=> "2"
Run Code Online (Sandbox Code Playgroud)