问题标签 [dialyzer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
elixir - 使用侦听过程构建 Elixir GenServer 的正确方法
我正在使用elixir-socket库作为将我的后端应用程序连接到外部 websocket 的一种方式。我需要管理此过程(如果出现故障则重新启动,如果无法连接则以指数方式回退等)。
目前,我创建了一个管理 GenServer 进程,该进程在给定时间后生成一个循环套接字(如下所示)。我有一个主管管理SocketManager
(以及链接的Socket
)流程:
socket_manager.ex
套接字
上面的效果很好,但是我不确定这是构造它的最佳方法。据我了解,Task
应该只针对具有确定生命周期的任务,而不是针对永久过程。此外,在运行时,mix dialyzer
我得到以下输出(参考 中的Task.spawn_link
行SocketManager
):
任何人都可以帮助我就如何构建它以及我如何能够满足 Dialyzer 提出建议?
谢谢!
elixir - dialyzer 无法识别 elixir 函数并出现错误:0:unknown_function
我在我的计算机上使用 elixir 和 erlang otp 21 安装了 elixir 1.7.2 asdf
。在我的项目混合文件中,我按照dilyzer github上的说明添加了最新的透析器候选版本
当我运行时,mix dialyzer
我在创建 plt 时遇到了几个错误,其中包括:
然后一切都失败并出现错误,包括内置的长生不老药,如System.get_env/1
elixir - “透析器通常永远不会出错”,但我无法弄清楚我的@spec 是如何不正确的
我有一些代码使透析器失败,我不明白为什么。无论我@spec
在函数顶部放入什么,对该函数的调用都会返回一个令人费解的透析器错误。这是函数的简化。据我所知,我已经正确指定了该功能。
我的问题是,如果我希望得到除以下内容之外的任何内容,则跨代码库对该函数的每次调用都会失败{:ok, balances}
:
透析器警告说The variable _ can never match since previous clauses completely covered the type {'ok',[map()]}
。我读到这意味着对 balances 的任何调用都将始终 return {:ok, balances}
,但这不可能是真的,因为 case 语句 forHTTPoison.get
是函数中评估的最后一件事,它似乎只有三个可能的结果:
{:ok, list}
{:internal_server_error, String.t(), String.t()}
{:internal_server_error, map | list, String.t()}
.
我知道我可能遗漏了一些非常明显的东西,但我无法弄清楚它是什么。任何帮助将不胜感激。谢谢你!
elixir - 我们可以在透析器中使用哪个版本的 elixir-otp-erlang?
背景
最新版本的 Elixir (1.7.X) 有一个错误,阻止了透析器 16 的使用。
现在,我知道以前的一些版本没有这个问题,但我不知道哪些版本。
我试过的
我已经测试了以下版本:
一切都无法正常工作。
可以使用 MWE 重现该错误:
问题
不受此错误影响的最新版本的 elixir-otp-erlang 是什么?
elixir - 有没有办法让 Dialyzer 手表代码更改?
我正在使用将任务附加到 Mix的dilyxir 。dialyzer
但它似乎没有任何--watch
选项可以重新运行文件更改的类型检查。
是否有 CLI 方法来实现这一目标?
process - 在无限超时后使用接收挂起 Erlang 进程
我是 Erlang 的新手,我想暂停一个函数。我使用无限超时接收,我的函数如下所示:
当我运行透析器工具时,它返回“函数没有本地返回”。我应该用 timer:sleep(infinity) 替换这个函数吗?对于暂停,哪个更好?太感谢了。
error-handling - 处理异常 Erlang 时 throw 和 catch 的区别
我有一个像下面这样的简单代码来测试 Erlang 如何处理异常。throw 和 catch 的 **** 参考。
当我用 throw 运行透析器时,它显示警告:
exception.erl:9:变量 Result 永远无法匹配,因为前面的子句完全覆盖了“奇数”类型
可以通过添加来修复此警告
案件捕获
功能乐趣/2。
当我用 catch 运行透析器时,透析器成功通过。
我想知道接球和投掷。我们应该抛出或捕获哪种情况?
elixir - 透析器不知道:httpc
我正在研究 Elixir,使用 Erlang 内置:httpc
函数来执行获取请求。
功能运行良好。然后在运行 mix dialyzer 后,它返回错误:
我放这行是为了告诉 Dialyzer 跳过检查该功能。
但是,错误仍然存在
elixir - 关于 Gettext 模块上的 pattern_match_cov 的透析器警告
我开始在基于 Phoenix 1.4 的伞形项目中使用 Dialyzer (dialyxir 1.0.0-rc.6)。
当我mix dialyzer
第一次运行它时,我收到了这个警告。
以下是该文件的内容 ( gettext.ex
):
我没有碰它。如何修复它或抑制警告?
[更新]
我发现这个问题已于 2018 年 2 月 20 日关闭:
https://github.com/elixir-lang/gettext/issues/115
我确认新创建的 phoenix 应用程序不会产生透析器警告。我还确认了另一个(新创建的)凤凰伞项目。
我还没有为我现有的项目找到任何解决方案。
[更新 2]
我找到了如何重现我的问题。
新创建的应用程序不会警告您,但如果它包含实际需要插值的翻译数据,它会警告您。
有关更多信息,请参阅我的 github 问题评论:
https://github.com/elixir-lang/gettext/issues/115#issuecomment-491591307
elixir - Dialyzer 发出类型规范是成功键入多个同名函数的子类型
我有以下两个功能,我收到了关于它们的透析器警告:
以下是功能:
我不明白为什么我会收到此警告。我认为这是在 Elixir 中编写具有不同参数类型的函数的正确方法,但鉴于 Dialyzer 不断发出警告,我开始怀疑我是否错误地编写了这段代码?
这些是我正在运行的透析器标志:
复制样本:
以下是我收到的警告: