Elixir 如何在比较模块变量和局部静态变量时抑制透析器警告?
透析器指责代码试图与模块变量匹配:Elixir 如何在比较模块变量和局部静态变量时抑制透析器警告?,elixir,dialyzer,Elixir,Dialyzer,透析器指责代码试图与模块变量匹配: defmodule Main do # -> :demo @env Application.get_env(:myproject, :env) def run do case @env do :production -> 1 _ -> 2 end end end 我该如何避免警告,还是每次都要写下面的内容 def run do env = Application.get_
defmodule Main do
# -> :demo
@env Application.get_env(:myproject, :env)
def run do
case @env do
:production -> 1
_ -> 2
end
end
end
我该如何避免警告,还是每次都要写下面的内容
def run do
env = Application.get_env(:myproject, :env)
case env do
...
end
end
我应该每次都这样写吗
def run do
env = Application.get_env(:myproject, :env)
case env do
...
end
end
这取决于你想要实现什么<代码>透析器是智能的。模块属性是编译时的野兽,它们在编译时被计算和替换。在上面的代码段中,BEAM的作用是:
defmodule Main do
def run do
案例:演示
:生产->1
_ -> 2
结束
结束
结束
这就是说,dialyzer
会警告您出现无法访问的语句,因为它会分析生成的代码,所有宏都已展开,模块属性已插入
如果您希望根据环境使用不同的编译代码,可以使用几种方法
Application.get_env(:myproject,:env)
直接在case
子句中(或根据建议分配给局部变量)