1个不稳定版本
0.1.0 | 2019年1月15日 |
---|
#5 in #lark
94 每月下载量
在 13 个crate中使用 (10 直接)
52KB
1.5K SLoC
Lark编译器中错误的表示。
lib.rs
:
通过查询跟踪错误的类型。
以下是工作原理
- 可以自身报告错误的查询返回
WithError<T>
;该值中包含的错误是在执行该查询期间发现的。 - 如果另一个查询使用返回
WithError
的查询的结果,它只需使用into_value
来忽略错误 --WithError
总是包含一些形式的安全值供您使用(即,您可以忽略错误并继续进行)。 - 在最坏的情况下,可以使用
Result<T, ErrorReported>
并让Err(ErrorReported)
作为“由于某些错误无法生成值”的安全值。这不是首选,因为现在下游查询必须注意你是否传播了错误,但有时这是最好/最容易的事情。- 为此,
or_sentinel!
查询充当一种将Result<T, ErrorReported>
转换为具有适当安全值的U
的?
操作符 -- 如果结果是Err(ErrorReported)
,它为U
创建错误安全值并返回它。 - 这依赖于
ErrorSentinel
trait,它定义了给定类型的错误安全值。
- 为此,
此方案并非最符合人体工程学,我希望进行修改,但暂时可以使用。 -nikomatsakis
依赖项
约6-15MB
~211K SLoC