I’m wondering as to why I get this error, shown below:
However, when I define the variable
hours = 8.0 inside the
daily_rate(hourly_rate) function inside the
FreelancerRates module, the
error is resolved.
Can someone please explain, this behavior.
Thanks in advance!
February 5, 2023, 8:46pm
According to the rules of lexical scope, any variables defined in the surrounding scope are accessible in all other scopes it contains.
In Figure 1 above, any variable defined in the top level scope will be accessible in the module’s scope and any scope nested inside it, and so on.
There is an exception to this rule which applies only to named functions: any variable coming from the surrounding scope has to be unquoted inside a function clause body.
To see how that works check
Quoting from the link above again:
defmodule M do
a = 1
# 'a' inside unquote() unambiguously refers to 'a' defined
# in the module's scope
def a, do: unquote(a)
# 'a' inside the body unambiguously refers to the function 'a/0'
def a(b), do: a + b
M.a #=> 1
M.a 3 #=> 4
In any way, I think you want to define a constant. The Elixir version of that are module attributes, see
Module attributes - The Elixir programming language.
Hope that helps. :)
Exactly, I was looking to define them as constants within the module;
I’ll also look into the scoping rules in Elixir, in the link you provided.
Thanks for your time.