hershel-theodore-layton / type-visitor
具象化类型的访问器核心
Requires
- hhvm: ^4.102
Requires (Dev)
- facebook/fbexpect: ^2.8
- hhvm/hacktest: ^2.3
- hhvm/hhast: ^4.102
- hhvm/hhvm-autoload: ^3.2
This package is auto-updated.
Last update: 2024-09-26 18:15:50 UTC
README
该项目源于 static-type-assertion-code-generator
的组件。以前,BigSwitch 通常与 new SomeTypeStructure()
相关联。现在,您可以插入所需的功能。
HTL\TypeVisitor
允许您通过实现 Visitor<Tt, Tf>` 接口来访问可具象化的类型。有关示例用法,请参阅 TypenameVisitor。
调用 TypeVisitor\visit() 开始。
TAlias 类型包含三个字段,用于高级使用
"alias"
- 此语句左侧的
"ExampleName"
名称
type ExampleName = int;
- 此语句左侧的
"opaque"
:- 如果别名使用
newtype
而不是纯type
声明,则为真。
- 如果别名使用
"counter"
:- 每次调用您的访问器函数时都会为每个调用生成一个唯一的整数。
- 此序列从
1
开始,并在每次调用$visitor->x()
时增加。
对 hhvm 4.102 到 4.108 的用户的警告。
在 hhvm 版本 4.102 和 4.108 之间,hhvm 将 enum class
的类型从 enum
改为 class
。这意味着将调用 ->enum()
而不是 ->class()
。如果您的访问者需要在所有支持的 hhvm 版本上具有一致的行为,您必须在 function enum(...)
的顶部添加基于反射的检查,并在参数是 enum class
的 classname
时调用 ->class()
。
继续构建一些令人惊叹的东西
- 根据 Hack 类型生成文档。
- 创建一个“弱”断言/强制转换库。
- 使用它生成特定类型的模拟数据。
或者查看 static-type-assertion-code-generator
以了解此访问者如何用于与类型测试 as
表达式等价的功能代码生成。
此 API 的稳定性
以下警告是 type-assert README 的一部分
TypeStructure<T>
、type_structure()
和ReflectionTypeAlias::getTypeStructures()
是 HHVM 的实验性功能,不受 Facebook 或 HHVM 团队的支持... 我们强烈建议改为使用 TypeAssert\matches() 和 TypeCoerce\match()。
此警告最初由 Fred Emmott 在 2016 年添加:提交。
此项目使用 TypeStructure<T>
,与 TypeAssert\matches<T>()
的方式相同。如果此 API 被删除,则需要更改 type-assert 和 type-visitor。 我 不期望在所有这些年后没有通知就删除此 API,但这并不意味着这种情况不会发生。
对您的影响: 此 API 可能会在 HHVM 的未来版本中出现问题。如果可能,仅在构建步骤中使用此 API,而不是在请求中。这允许在需要时用性能较低的填充物替换它。
致未来的版权律师
本访问者所基于的工作于2021年创建。因此,本仓库的许可年份是2021年,而不是2023年,即本仓库发布的时间。
我没有印象认为这700行代码将在版权期限结束时对预期的用途有用。