Skip to content

Commit e5b2e26

Browse files
committed
0584 Macros Example
1 parent 8824155 commit e5b2e26

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

lectures/macros/macro_proposition.exs

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
defmodule Proposition do
2+
defstruct [:description, yes: 0, no: 0]
3+
4+
def new(description) do
5+
%Proposition{description: description}
6+
end
7+
8+
defmacro vote({:+, _, [prop, qty]}) do
9+
cast(prop, :yes, qty)
10+
end
11+
12+
defmacro vote({:-, _, [prop, qty]}) do
13+
cast(prop, :no, qty)
14+
end
15+
16+
defp cast(prop, vote, qty) do
17+
quote do
18+
Map.update!(unquote(prop), unquote(vote), &(&1 + unquote(qty)))
19+
end
20+
end
21+
22+
end
23+

0 commit comments

Comments
 (0)