Skip to content

Instantly share code, notes, and snippets.

@nickretallack
Last active August 29, 2015 14:06
Show Gist options
  • Save nickretallack/bb6841f3d9f2c8b33fdb to your computer and use it in GitHub Desktop.
Save nickretallack/bb6841f3d9f2c8b33fdb to your computer and use it in GitHub Desktop.
overrides in elixir
defmodule Foo do
defmacro __using__(_) do
quote do
def foo() do
IO.puts "Foo"
end
defoverridable [foo: 0]
end
end
end
defmodule Bar do
use Foo
def foo() do
IO.puts "Bar start"
super()
IO.puts "Bar end"
end
end
IO.puts "\nTesting Bar"
Bar.foo
# Bar start
# Foo
# Bar end
defmodule Baz do
defmacro __using__(_) do
quote do
use Foo
def foo() do
IO.puts "Baz start"
super()
IO.puts "Baz end"
end
defoverridable [foo: 0]
end
end
end
defmodule Qux do
use Baz
def foo() do
IO.puts "Qux start"
super()
IO.puts "Qux end"
end
end
IO.puts "\nTesting Qux"
Qux.foo
# Qux start
# Baz start
# Foo
# Baz end
# Qux end
defmodule Test do
use Baz
use Foo
end
IO.puts "\nTesting Test"
Test.foo
# Foo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment