想象一下我有一个简单的字符串(实际上,这个字符串可以包含很多复杂的项目,例如数字组合,Guid等...): “ a,b,c” 以及合适的解析器。
然后经过一些更改,字符串变为: “ a,b,c,d,e” 解析器已经过重新编写,以达到成功的目的。
但是现在我必须确保重写的解析器在解析旧格式字符串时不会失败。 是否可以提供与FParsec的向后兼容性?
答案 0 :(得分:1)
向后兼容性应在您的数据模型中实现,并使解析器仅支持该数据模型。
说,如果您的Result
数据类型是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的答案,以解析一些简单的方法来解析“任一列表”数据。
除非您提供了现有代码,否则很难说出任何东西。