Packages

Lets you define multiple heads for the same function: defmodule Test do import MultiDef mdef fred do { :init, val } -> fred {:double, val} { :double, val } -> IO.puts(val*2) a, b -> a+b end end IO.inspect Test.fred 1, 2 ...

Current section

Files

Jump to
multidef README.md
Raw

README.md

MultiDef—Define a function with multiple heads
==============================================
Add the dependency `{:multidef, "> 0.0.0"}` to mix.exs.
Use it like this:
defmodule Test do
import MultiDef
mdef fib do
0 -> 0
1 -> 1
n -> fib(n-1) + fib(n-1)
end
end
IO.puts Test.fib(20)
When clauses can be used:
defmodule Test do
import MultiDef
mdef fib do
0 -> 0
1 -> 1
n when n > 0 -> fib(n-1) + fib(n-1)
end
end
IO.puts Test.fib(20)
Does not support default arguments.
Does not enforce that all heads have the same arity (deliberately).
----
Copyright © 2014 Dave Thomas, The Pragmatic Programmers
@/+pragdave, dave@pragprog.com
Licensed under the same terms as Elixir