types - Erlang 从超类型中排除类型
问题描述
在 Erlang 中,是否可以通过从超类型中排除子类型来定义类型?例如,我将如何定义“除pid()
”之外的类型:
-type anything_but_pid() :: ...?
阅读有关主管数据类型的文档,我遇到了这个类型规范child_id()
,它将类型定义为term()
,然后Not a pid()
在下面的评论中说:
child_id() = term()
不是一个
pid()
。
如果我不想明确列出所有可能的类型,这是我能做的最好的吗?
解决方案
不,从 OTP 23(甚至 24)开始,不支持此功能。
此外,在这种情况下期望 Dialyzer 提供帮助是不明智的,因为 Dialyzer 经常过于近似,出于几个原因,虽然我不认为它会term()
立即变成这样的类型,但它很可能会在第一个给定的机会(例如,无论您在哪里调用此类函数)。
推荐阅读
- c# - 使用 JWT Token 时 Swagger 不允许检索
- asp.net-core - 具有两个参数的 ASP.NET Core OData 操作
- xml - PowerShell - 将带有公共标头和项目的 XML 转换为 CSV
- angular - 使用 ngrx 实体的悲观更新
- python - Win32api SetConsoleCtrlHandler 在不应该运行时运行
- typo3 - 如何自定义自定义内容元素以适用于流畅的错字3 6 -> 9
- python - 在 django 中需要登录
- reactjs - React Native 和 Https 代理
- selenium - Selenium Webdriver 检查图像是否使用 id 显示
- javascript - 在 contenteditable div 中更改 innerHTML 时保留光标位置