EExでタグをエスケープする場合には%を重ねる
こちらを見てピンときたので、Elixirの EEx でも確認した所同様にできるのでメモ。
foo <%= bar %>
例えば、これをそのまま出力したい場合。
iex(1)> EEx.eval_string("foo <%%= bar %>") "foo <%= bar %>" iex(2)> EEx.eval_string("foo <%%= bar %>", [bar: "piyo"]) "foo <%= bar %>"
エスケープした場合第二引数の bindings
に bar
をアサインしようとしてもそのまま出力される。
<% %>
についてもそのまま出力したい場合は前方の %
を2つ重ねればよい。
foo <% bar %>
iex(3)> EEx.eval_string("foo <%% bar %>") "foo <% bar %>"
後方の %
だけ2つ重ねるとエラーが出るので要注意。
iex(3)> EEx.eval_string("foo <% bar %%>") ** (TokenMissingError) nofile:1: syntax error: expression is incomplete lib/eex/compiler.ex:45: EEx.Compiler.generate_buffer/4 lib/eex.ex:196: EEx.eval_string/3 (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6 (iex) lib/iex/evaluator.ex:245: IEx.Evaluator.handle_eval/5 (iex) lib/iex/evaluator.ex:225: IEx.Evaluator.do_eval/3 (iex) lib/iex/evaluator.ex:203: IEx.Evaluator.eval/3
両方の %
を重ねると、後半だけ重ねた状態でそのまま出力される。これを利用することはないとは思うが、挙動だけ覚えておいたほうが良さそう。
iex(4)> EEx.eval_string("foo <%% bar %%>") "foo <% bar %%>"
- 作者: Dave Thomas,笹田耕一,鳥井雪
- 出版社/メーカー: オーム社
- 発売日: 2016/08/19
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る