これまで ElixirですごいE本 1章 - bokuweb.me

- 作者: Fred Hebert
- 出版社/メーカー: オーム社
- 発売日: 2014/08/11
- メディア: Kindle版
- この商品を含むブログ (1件) を見る
2章
2.2 モジュールを作る
Elixirではdefmodule
でモジュールを定義する。
モジュール名となるailias
を第一引数として渡す、すると:module
、モジュール名
、モジュールのバイナリ
、ブロックコンテンツを評価した結果
がタプルとして返ってくる。
iex(13)> defmodule Foo do ...(13)> def bar, do: :baz ...(13)> end {:module, Foo, <<70, 79, 82, 49, 0, 0, 4, 64, 66, 69, 65, 77, 69, 120, 68, 99, 0, 0, 0, 126, 1 31, 104, 2, 100, 0, 14, 101, 108, 105, 120, 105, 114, 95, 100, 111, 99, 115, 95, 118, 49, 108, 0, 0, 0, 4, 104, 2, ...>>, {:bar, 0}}
- 関数は
def
で定義する - 非公開のプライベートな関数は
defp
で定義する
試してみる
iex(1)> defmodule Foo do ...(1)> def bar do ...(1)> sum(1,2) ...(1)> end ...(1)> defp sum(a,b), do: a+b ...(1)> end {:module, Foo, <<70, 79, 82, 49, 0, 0, 4, 160, 66, 69, 65, 77, 69, 120, 68, 99, 0, 0, 0, 126, 131, 104, 2, 100, 0, 14, 101, 108, 105, 120, 105, 114, 95, 100, 111, 99, 115, 95 , 118, 49, 108, 0, 0, 0, 4, 104, 2, ...>>, {:sum, 2}} iex(2)> Foo.bar 3 iex(3)> Foo.sum(1, 2) ** (UndefinedFunctionError) undefined function: Foo.sum/2 Foo.sum(1, 2) iex(3)>
uselessモジュールを作ってみる
- useless.ex
defmodule Useless do def add(a, b), do: a + b def hello do IO.puts "Hello, world!" end def greet_and_add_two(x) do hello() add(x, 2) end end
2.3 コードをコンパイルする
$ elixirc useless.ex
するとElixir.Useless.beam
が生成される。
iex(1)> Useless.hello Hello, world! :ok iex(2)> Useless.add(10,12) 22 iex(3)> Useless.greet_and_add_two(5) Hello, world! 7
2.4 マクロを宣言する
Erlang でマクロと呼んでいるものは,Elixir のマクロとは違う
詳しくは以下。@ つきの属性(attribute)をErlangのマクロの代わりとしている。
2015/06/18/すごいE本をElixirでやる(8) - ヽ(´・肉・`)ノログ
では、Elixirにおけるマクロとは。 以下が分かりやすかった。
マクロを使うと、"コードを書くコード"が書けます。いわゆるメタプログラミングです。DSL定義などなど、用途は様々。
2.5 モジュールについてもっと詳しく
[module: Useless, exports: [__info__: 1, greet_and_add_two: 1, add: 2, hello: 0, module_info: 0, module_info: 1], attributes: [vsn: [242530420853490857147686343443575002184]], compile: [options: [:debug_info], version: '6.0.1', time: {2015, 10, 7, 7, 9, 55}, source: 'path_to_module/useless.ex'], md5: <<182, 117, 168, 245, 104, 238, 42, 14, 98, 230, 188, 53, 82, 64, 212, 72> >]
循環参照
対策等がないか調べたけど出てこなかった。