相关疑难解决方法(0)

为什么Rust在main函数中没有返回值,以及如何返回值呢?

在Rust中,main函数定义如下:

fn main() {

}
Run Code Online (Sandbox Code Playgroud)

但是,此函数不允许返回值.为什么一种语言不允许返回值,是否有办法返回一些东西?我是否能够安全地使用C exit(int)功能,否则会导致泄漏等等?

program-entry-point return rust

23
推荐指数
5
解决办法
8176
查看次数

如何使 Result 的内部值必须使用

我可以使用该#[must_use]属性将函数标记为具有必须使用或显式忽略的返回值:

#[must_use]
fn plain() -> i32 {
  1
}

fn main() {
  plain();  // warning
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我想更改我的函数,使其现在返回 a Result,我不能这样做:

#[must_use]
fn result() -> Result<i32, ()> {
  Ok(1)
}

fn main() {
  result().unwrap();
}
Run Code Online (Sandbox Code Playgroud)

因为对的调用.unwrap()算作“使用”,并且该#[must_use]属性应用于整个Result.

有没有办法#[must_use]也适用于内部类型?本质上我想确保i32不会意外地被分号“吃掉”。

我有一个额外的限制,即我无法更改此函数的公共 API,因此我无法让它返回 aResult<MustUse<i32>, ()>或类似的内容。

rust

3
推荐指数
1
解决办法
506
查看次数

为什么在结束“循环”时“中断”不需要分号?

摘自Rust 书的第 3.5 章

我们使用break带有 value的关键字counter * 2。在循环之后,我们使用分号结束为 赋值的语句result

加上代码片段:

fn main() {
    let mut counter = 0;

    let result = loop {
        counter += 1;

        if counter == 10 {
            break counter * 2;
        }
    };

    println!("The result is {}", result);
}
Run Code Online (Sandbox Code Playgroud)

我明白这是如何工作的以及为什么结果是 20,但我注意到如果我删除包含break关键字的行上的分号,程序是等效的。

为什么在这种情况下分号是可选的?

syntax loops break keyword rust

2
推荐指数
2
解决办法
288
查看次数

标签 统计

rust ×3

break ×1

keyword ×1

loops ×1

program-entry-point ×1

return ×1

syntax ×1