Skip to content

Instantly share code, notes, and snippets.

@sasa1977
Created July 16, 2025 13:17
Show Gist options
  • Select an option

  • Save sasa1977/346f9c636f8536a89f665ab1246e7580 to your computer and use it in GitHub Desktop.

Select an option

Save sasa1977/346f9c636f8536a89f665ab1246e7580 to your computer and use it in GitHub Desktop.
defmodule Person.Base do
defmacro __using__(overrides) do
quote bind_quoted: [overrides: overrides] do
base_fields = [name: "", age: 0]
fields = Keyword.merge(base_fields, overrides)
defstruct fields
def greet(person) do
"Hello, I'm #{person.name} and I'm #{person.age} years old"
end
def adult?(person) do
person.age >= 18
end
defoverridable greet: 1, adult?: 1
end
end
end
defmodule Person do
use Person.Base
end
defmodule Employee do
use Person.Base,
salary: 0,
department: ""
def greet(employee) do
"Hi, I'm #{employee.name}, I work in #{employee.department}"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment