parsing - 通过 FParsec 进行解析的向后兼容性
问题描述
想象一下我有一个简单的字符串(实际上这个字符串可以包含很多复杂的项目,如数字组合、Guid 等):“a、b、c”和适用于它的适当解析器。
然后经过一些更改,字符串变为:“a, b, c, d, e” Parser 已被重写以获取成功的结果。
但是现在我必须确保重写的解析器在解析旧格式字符串时不会失败。是否可以提供与 FParsec 的向后兼容性?
解决方案
向后兼容应该在你的数据模型中实现,并使解析器只支持这个数据模型。
比如说,如果你的Result
数据类型是 a List<>
(它的目的是 3 元素长),只有最小的入侵使解析器返回一个 4 元素的数据。然后,您使用应用程序逻辑检查数据有效性,一切就绪。
但是,如果您Result
是一个固定的元组/三元组T1 * T2 * T3
,则没有直接的方法来添加第四个元素。您可能需要一个额外的层——通常实现为可区分联合 (DU),如下所示:
type MyData =
| OldFormat of T1 * T2 * T3 // this is your old way
| NewFormat of T1 * T2 * T3 * T4 // this is your new data format
这样,您将必须实现包装器 DU 并复制解析逻辑以支持 4 元素数据。
检查this、this和this的答案,了解一些简单的解析“任一列表”数据的方法。
除非您提供现有代码,否则很难进一步说明。
推荐阅读
- angular - 带有故事书 6 的 Angular 8
- java - MultipartUploadRequest(上传时出错)android 10
- php - 额外的添加到购物车按钮重定向到 WooCommerce Loop 上的结帐
- swift - 如何使 backBarButton 在模态演示中工作?
- reactjs - 打字稿:两种类型的函数声明之间的区别?
- visual-studio-code - 如何测试我的扩展与不同 VS 代码版本的兼容性?
- typo3 - TYPO3 FLUID:如何使用多个模板?
- logging - 使用 promtail 处理多行单日志文件
- reactjs - 谷歌新闻不承认我的规范标签
- sql - 从多个表中选择数据(Laravel)