如果我们有不可变变量,为什么我们在 Rust 中需要常量?

Why do we need constants in Rust if we have immutable variables?

所以我正在探索 Rust,并且我已经阅读了常量和不可变变量之间的技术差异。但似乎不可变变量可以做常量可以做的所有事情。如果不可变变量可以完全替代它们,那么常量存在的意义是什么?

您应该考虑两个计算时间:

  • 编译时间
  • 运行 时间

常量是在编译时计算的(并且可以用于其他编译时计算)因此 运行 时间更快,因为它需要再次计算它。

不可变变量总是在 运行 时计算(来自通常在计算时不可用的外部输入),常量不能在那里使用。

Then what is the point of existence of constants, if immutable variables can fully substitute them?

虽然在某些用例中常量可以与不可变变量互换,但值类别之间的主要区别在于它们的语义。

  • 立即声明常量说明了关于 reader 的值的很多信息:特别是,包含该值的信息必须在编译时全部可用。这是编译器强制执行的 属性。这为 reader 设定了关于价值是什么以及可以用它做什么的期望。

  • 当然,不可变变量的初始化要灵活得多。没有强制要求这些值在编译时已知,并且产生这些值的计算可能是任意复杂的,甚至会随着时间的推移而演变。

差异可能主要是风格上的(在许多但不是所有用例中),但在涉及可读性和可维护性时,这种区别很有价值。