请考虑Rust中的以下最小示例:
Foo
编译器出现以下错误:
T::BAR
无论我的问题的答案是什么,这都不是一个特别好的错误消息,因为它表明Sized
确实实现了constexpr
,尽管后者是一个特征限制。只有在经过大量的时间之后,我才发现实际上[T; N]
在其他上下文中是一个完全有效的表达式,而不是作为数组的长度参数。
有哪些规则可以控制哪种表达方式?因为数组是T
,所以我完全理解在编译时要知道长度。我自己来自C ++,我希望有一些限制类似于N
,但我没有在documentation中看到它只是说
固定大小的数组,表示为
_driver.WaitForClick(By.XPath("xpath value"), () => { return _driver.IsElementVisible(By.XPath("//div[@class='some value']")); }, TimeSpan.FromMilliseconds(250));
,用于元素类型{{1}}和非负编译时常量大小{{1}}。
答案 0 :(得分:6)
从Rust 1.24.1开始,数组长度基本上需要是数字文字或usize
的“常规”常量。今天存在少量的持续评估,但它或多或少地局限于基础数学。
在其他上下文中的完全有效的表达式,而不是作为数组的长度参数
Generic associated consts can't currently be used to parameterize fixed array lengths (#42863)
这不是一个特别好的错误消息
Error message should be improved for associated consts in array lengths (#44168)
我希望有一些限制类似于
constexpr
这个本质上是限制,问题是目前const
允许使用的内容受到严格限制。值得注意的是,这些是不允许的:
良好的常量/编译时评估工作仍在进行中。有大量的RFC,问题和PR改善了这一点。样本: