Skip to content

Instantly share code, notes, and snippets.

View Adzz's full-sized avatar

Adam Lancaster Adzz

View GitHub Profile
defimpl Shape, for: Square do
def area(shape) do
shape.side * shape.side
end
end
defimpl Shape, for: Circle do
def area(shape) do
shape.radius * shape.radius * 3.14
end
end
%Square{side: 10}
|> Shape.area() #=> 100
defmodule EquilateralTriangle do
defstruct [:side]
end
defimpl Shape, for: EquilateralTriangle do
def area(shape) do
# some basic high school math that I've forgotten
end
end
defmodule Project do
def total_cost(shape, cost_per_square_meter) do
Shape.area(shape) * cost_per_square_meter
end
end
defmodule Square do
defstruct [:side]
end
defmodule Circle do
defstruct [:radius]
end
defmodule EquilateralTriangle do
defstruct [:side]
class Square
def initialize(side)
@side = side
end
def area()
@side * @side
end
end
class Circle
def initialize(radius)
@radius = radius
end
def area()
3.14 * @radius * @radius
end
end
defmodule Square do
defstruct [:side]
end
defmodule Circle do
defstruct [:radius]
end
defmodule Area do
def calculate(shape) do