为什么我需要写let来声明变量?

时间:2013-06-03 08:39:56

标签: types programming-languages type-inference type-systems rust

在Haskell中,我不需要编写任何内容来声明变量。在C ++中,我需要编写auto,据我所知,它以类似的方式生成let

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

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

    hi = "hi";
    

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

  • 强制用户编写let的理由是什么?特别是,反对让任选的理由是什么?

2 个答案:

答案 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中你没有声明变量,你声明绑定到值。

所以它只是一个约定,但除非你声明它是可变的,否则你必须将它视为一个绑定。我认为没有理由,只是为了让它更好“可解析”并保持语言清洁。