スポンサーリンク

2016年6月25日

[Elixir]マクロでdo~end記述を作る際の例

とある錬金術師の万能薬(Elixir)

Goal

  • Elixirのマクロでdo~end記述を作る際のテンプレート

Dev-Environment

OS: Windows8.1
Erlang: OTP 19.0(Eshell v8.0)
Elixir: 1.3.0

Text

マクロでdo~end記述をできるようにする際、
同一の記述を何回も使ったのでテンプレートとして残しておく。
参考にしたのはExUnit(v1.2.5)のCaseマクロです。

Example:

defmodule DoEndMacroTemplate do
  defmacro do_block(contents) do
    contents =
      case contents do
        [do: block] ->
          quote do
            unquote(block)
          end
        _ ->
          quote do
            try(unquote(contents))
          end
      end

    contents = Macro.escape(contents, unquote: true)

    quote bind_quoted: binding do
      def get_contents_result(), do: unquote(contents)    end  endend

Example:

defmodule UseExample do
  use DoEndMacroTemplate

  do_block do
    true
  end
end

Example:

iex> UseExample.get_contents_result
true
ただのメモです。
誰かの役に立ったら幸いです。

Bibliography

なし

人気の投稿