How to assign a variable to a value in the case condition. Is the following way correct? If a better solution exists, let me know. Your help will be highly appreciable.
case stage_id do
stage_id = JobStage.get_job_stage(job_opening_id, 1).id
stage_id = case stage_id do
"" -> JobStage.get_job_stage(job_opening_id, 1).id
_ -> stage_id
It would likely generate the following warning:
Note variables defined inside case, cond, fn, if and similar do not leak. If you want to conditionally override an existing variable “stage_id”, you will have to explicitly return the variable.
No, it won’t.
This is a breaking change somewhere between 1.6 and 1.8. The warning has been removed and instead the behaviour changed.
There is no imperative assignment anymore in elixir.
I’m currently running 1.8.2-otp-21 and see this behaviour:
iex(1)> defmodule M do
...(1)> def f do
...(1)> x = :outer
...(1)> case "" do
...(1)> "" ->
...(1)> x = :inner
...(1)> IO.puts x
warning: variable "x" is unused (if the variable is not meant to be used, prefix it with an underscore)
As you can see, I see a warning about the “inner”
x not beeing used, but I do not see a warning about the imperativ assignment, instead “outer”
x stays unchanged.
OK - but there still is a warning.
warning: variable “stage_id” is unused (if the variable is not meant to be used, prefix it with an underscore)
though I’d expect the new one to be more mystifying to newcomers. And ignoring the warning will have undesirable consequences.