Neither `%_{}` nor `%self{}` can be supported because they already have
a meaning in pattern matches. The former means _any_ struct and the
latter binds the matched struct name to the variable `self`.
You can give `__MODULE__` another name with an alias:
alias __MODULE__, as: Struct def connect(%Struct{} = channel)
On January 21, 2022, "gmail.com" <[email protected]> wrote:
> 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]
> <mailto:[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
> <https://groups.google.com/d/msgid/elixir-lang-core/da49bf41-d4ad-
> 4fc7-a88c-
> 1338e7a463c1n%40googlegroups.com?utm_medium=email&utm_source=footer>.
--
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/38c71ced95b2fe910b644fda40da8cb645914f3f%40hey.com.