elixir-v1.1.0リリース
elixirのv1.1.0がリリースされました。パチパチ。MapSetなど重要な機能が追加されています。Macro周りではimportでの名前の衝突を検出して、勝手に乗っ取ることがしずらくなっています。
Mm.exというファイルを作ってみます。
defmodule Mm do def h do IO.puts "override\n" end end
これをコンパイルしてimport Mmすると昔ならIExのhコマンドを乗っ取ることができましたが、....
bash-3.2$ iex Eshell V6.3 (abort with ^G) Interactive Elixir (1.1.0-beta) - press Ctrl+C to exit (type h() ENTER for help) iex(1)> c("Mm.ex") [Mm] iex(2)> import Mm nil iex(3)> h ** (CompileError) iex:3: function h/0 imported from both Mm and IEx.Helpers, call is ambiguous (elixir) src/elixir_dispatch.erl:111: :elixir_dispatch.expand_import/6 (elixir) src/elixir_dispatch.erl:82: :elixir_dispatch.dispatch_import/5 iex(3)>
MmとIEx.Helpersとでh/0が不明瞭であると怒られてしまいます。
これを回避(?)したい場合、import でexceptオプションを使い、IEx.Helpers.h/0を除外しておきます。
iex(2)> import Mm nil iex(3)> import IEx.Helpers, except: [h: 0] nil iex(4)> h override :ok iex(5)>
これと同じことをExgettext.Helperで行うと、hコマンドを乗っ取って、日本語リソースにアクセスできるようになります。
$ iex -S mix ... iex(4)> import IEx.Helpers, except: [h: 0, h: 1]; import Exgettext.Helper nil iex(5)> h Enum.reverse/1 def reverse(collection) コレクションを逆順にします。 例 ┃ iex> Enum.reverse([1, 2, 3]) ┃ [3, 2, 1] iex(6)>
https://github.com/k1complete/l10n_elixir
https://github.com/k1complete/l10n_ex_unit
https://github.com/k1complete/l10n_iex
に言語リソースのソースを置きました。今回からex_docにパッチを当てなくても、上記のプロジェクトをcloneしてmix docsでドキュメント生成まではできるようになりました。ただし、elixir本体のドキュメント生成では、「動作中のelixir」から(ex_docが)ドキュメントを取得するため、deps/elixir/binにPATHを設定する必要があります。
http://ns.maqcsa.org/elixir/docs/v1.1.0/elixir/
http://ns.maqcsa.org/elixir/docs/v1.1.0/iex/
http://ns.maqcsa.org/elixir/docs/v1.1.0/ex_unit/
にex_docで生成したリファレンスを置きました。
enjoy!