6

在 Haskell 中,我不需要写任何东西来声明一个变量。在 C++ 中我需要编写auto,据我所知,它的工作方式类似于 rust 的let.

  • let使用声明变量不是退一步吗?:

    let hi = "hi";
    
  • 类型推断和赋值运算符应该足够了,或者不是吗?:

    hi = "hi";
    

我只是问,因为在浏览 Rust 的教程时首先引起我注意的是let' 无处不在。我觉得,我不应该需要打字!编译器已经知道我声明了一个变量!对于声明未初始化的变量,有人可能会争辩说用类型声明它们可能会很好。但同样,它是可选的,风格问题。编译器可以在第一次使用时推断出类型,如果不使用则不编译,因此无法推断出类型。

  • 强迫用户写 let的理由是什么?特别是,反对让 let 可选的理由是什么?
4

2 回答 2

3

我不太确定语法方面的考虑(我认为省略它会很好,语法方面,只是更复杂),但let变量赋值在 Rust 中不是一回事。let是1.模式匹配,2.绑定引入。你只能x = 3在 x 是一个可变插槽时这样做,但你总是可以这样做let x = 3,它引入了一个可能不同类型和可变性的新绑定。删除let将使当前的绑定语义变得不可能。如果不是不可能的话,它也会使模式变得更加困难。例如,let (a, b) = some_fn_returning_tuple();

于 2013-07-18T15:09:46.750 回答
1

这是从 ML 语法推断出来的,在 ML 中,您不声明变量,而是声明与值的绑定。

所以它只是一个约定,但除非你声明它是可变的,否则你必须把它当作一个绑定。我不认为这是有原因的,只是为了让它更好地“可解析”并保持语言干净。

于 2013-07-19T10:14:32.833 回答