Skip to content

Latest commit

 

History

History
52 lines (36 loc) · 1.08 KB

20.1.md

File metadata and controls

52 lines (36 loc) · 1.08 KB

マクロとコードの評価

マクロの使いみち

  • 関数に適していないコード片
  • 問題のドメインにコードを寄せる

関数が使えるのならマクロは使うな!

20.1 if文の実装

Elixirのブロックはキーワードリスト

  • ブロック

    myif <condition> do
      <evaluate if true>
    else
      <evaluate if false>
    end
  • キーワードリスト

    myif <condition>,
      do: <evaluate if true>,
      else: <evaluate if false>

My.myif/2 を実行した結果

goh@goh% iex "macros/myif.exs"
Erlang/OTP 21 [erts-10.1.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe] [dtrace]

Interactive Elixir (1.7.4) - press Ctrl+C to exit (type h() ENTER for help)
> My.myif 1 == 2, do: (IO.puts "1 == 2"), else: (IO.puts "1 != 2")
1 == 2
1 != 2
:ok

上記のような結果になるのは…

  1. Elixirは関数呼び出し時に全ての引数を評価する
  2. IO.puts/1 は処理が成功すると :ok を返す

do節 or else節の実行を遅延させる必要がある => マクロを使う