在Haskell中,我不需要编写任何内容来声明变量。在C ++中,我需要编写auto
,据我所知,它以类似的方式生成let
。
使用let
声明变量是不是后退了一步?:
let hi = "hi";
类型推断和赋值运算符应该足够,或者它们不是?:
hi = "hi";
我只是问,因为在浏览Rust的教程时引起我注意的第一件事是let
到处都是{{1}}。我觉得,我不应该打字!编译器已经知道我正在声明一个变量!为了声明未初始化的变量,人们可能会争辩说用类型声明它们可能会很好。但同样,它是可选的,是一种风格问题。编译器可以在首次使用时推断出类型,如果没有使用则不编译,因此无法推断出类型。
答案 0 :(得分:1)
我对语法考虑不太确定(我认为省略它会很好,语法方面,只是更复杂),但let
和变量赋值在Rust中不是一回事。 let
是1.模式匹配,2。绑定引入。如果x是可变插槽,您只能x = 3
,但是总是执行let x = 3
,它会引入可能不同类型和可变性的新绑定。删除let
会使当前的绑定语义无法实现。如果不是不可能的话,它也会使模式变得更加困难。例如,let (a, b) = some_fn_returning_tuple();
。
答案 1 :(得分:0)
这是从ML语法推断的,而在ML中你没有声明变量,你声明绑定到值。
所以它只是一个约定,但除非你声明它是可变的,否则你必须将它视为一个绑定。我认为没有理由,只是为了让它更好“可解析”并保持语言清洁。