gpt4 book ai didi

c - Rust 的函数参数语法相对于 C 的目的是什么?

转载 作者:太空狗 更新时间:2023-10-29 15:23:58 26 4
gpt4 key购买 nike

奇怪的标题,反正在C函数中参数如下:

void func_name(int a, int b) {

}

但是在 Rust 中:

fn func_name(a: int, b: int) {

}

这只是语法上的偏好并且吸引了 Rust 的创建者,还是出于我不知道的特定目的?例如,Go 有“可选的分号”,但它们实际上是为了显示表达式何时结束。请记住,我是 Rust 的新手,所以如果您尝试提供一些 Rust 中的奇特示例,我可能不会理解:(

最佳答案

函数参数的声明只是 Rust 中变量声明的特例,因此您的问题的答案通常在于变量声明。

让我们从 C 开始:

a b = 1;
a = 2;

从语法的角度来看,C 不是很正则:

  • a b = 1; 中,a 是类型,b 是声明(和初始化)的新变量的名称
  • a = 1; 中,a 是先前声明的变量的名称,现在已初始化或分配了一个新值(覆盖先前的值) .

因此,在C中,要知道a是一个类型还是一个变量名,需要向前看(即如果后面跟着另一个变量那么它就是一个类型,否则它就是一个变量)。

现在,在 Rust 中:

let a = 1;
a = 2;

引入新变量的语法需要使用let关键字,没有歧义也不需要向前看来消歧。由于 Rust 中的阴影,这一点尤为重要(let a = ...; let a = a.foo;)。

虽然问题是关于类型的,所以让我们扩展示例:

let a: b = 1;
a = 2;

在这种情况下,同样不需要向前看。 let 之后是变量名,只有在解析 : 之后才是变量类型。

因此,Rust 的语法只是为了避免向前看(Rust 旨在拥有 LL(1) 语法)并且函数参数的语法只是遵循常规语法。

哦,顺便说一下,并不是所有的参数都有类型:

impl Foo {
fn doit(&self);
}

关于c - Rust 的函数参数语法相对于 C 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29580191/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com