假设我使用
sigil_S
构建一个字符串:iex> s = ~S(#{1 + 1})
"\#{1 + 1}"
那么我该如何让 Elixir 来评估字符串或执行插值,就像我输入了字面量 "#{1 + 1}"
一样呢?
换句话说,我该如何让它评估为 "2"
呢?
我知道可以使用 EEx
来代替(例如:EEx.eval_string "<%=1 + 1%>"
),但我很好奇是否有办法仅使用“普通”的字符串插值来实现。
~s
的用法。无论如何,我能够使用Code.eval_string ~s("#{s}")
(注意多余的引号)来实现这个目标。但是,我想做的事情有点复杂——本质上,我想要做到的是使用字符串插值语法来执行类似于EEx.eval_string/3
的操作,例如my_eval ~S(Hello, #{name}), [name: "world"]
。当 name 被定义时,Code.eval_string ~s("Hello, #{name}")
可以正常工作,但Code.eval_string ~s("#{s}")
则会失败,报错信息为“未定义 name/0 函数”。还有其他的想法吗? - Alistair A. IsraelCode.eval_string
还可以接受绑定。我能够使用以下代码实现我想要的功能:Code.eval_string ~s("#{s}"), [name: "world"]
- Alistair A. Israel