允许哪些表达式作为[_;中的数组长度N N]?

时间:2018-03-24 18:07:43

标签: arrays rust traits

请考虑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}}。

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改善了这一点。样本: