It is common to define a struct together with various functions that access
that struct in the module:
defmodule Chat.Channel do
defstruct name: "", public?: true
def new do
%Chat.Channel{name: "Untitled"}
end
def connect(%Chat.Channel{} = channel) do
IO.inspect(channel)
end
end
It is also common to alias the struct for easier access
defmodule Chat.Channel do
defstruct name: "", public?: true
alias Chat.Channel
# ...
end
But, say, renaming the module would require manually replacing all struct
occurrences with the new module name. Aliasing can help, but if the last
bit should be updated too(say Chat.Channel should be updated to Chat.Room)
it would still require to manually replace everything.
There is a workaround to use __MODULE__, but IMO the code looks a bit ugly
defmodule Chat.Channel do
defstruct name: "", public?: true
def new do
%__MODEUL__{name: "Untitled"}
end
def connect(%__MODEUL__{} = channel) do
IO.inspect(channel)
end
end
I think It would be great to have some kind of shortcut(syntactic sugar) to
access the struct within the module.
First I thought about something like %_(%%, %. etc) but this way it looks a
bit cryptic
def connect(%_{} = channel) do
So maybe something like %self would work
defmodule Chat.Channel do
defstruct name: "", public?: true
def new do
%self{name: "Untitled"}
end
def connect(%self{} = channel) do
IO.inspect(channel)
end
end
What do you think?
--
You received this message because you are subscribed to the Google Groups
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/elixir-lang-core/da49bf41-d4ad-4fc7-a88c-1338e7a463c1n%40googlegroups.com.