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!