From b010a2d4943d255df8aaba4926caa53daa04b339 Mon Sep 17 00:00:00 2001 From: jackymao Date: Fri, 19 Aug 2022 12:47:58 +0800 Subject: [PATCH] add return_value --- .../config.json" | 4 +- .../return_value.json" | 7 ++ .../return_value.md" | 72 +++++++++++++++++++ 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 "data/1.rust\345\210\235\351\230\266/2.rust\345\237\272\346\234\254\346\246\202\345\277\265/7.\350\277\224\345\233\236\345\200\274/return_value.json" create mode 100644 "data/1.rust\345\210\235\351\230\266/2.rust\345\237\272\346\234\254\346\246\202\345\277\265/7.\350\277\224\345\233\236\345\200\274/return_value.md" diff --git "a/data/1.rust\345\210\235\351\230\266/2.rust\345\237\272\346\234\254\346\246\202\345\277\265/7.\350\277\224\345\233\236\345\200\274/config.json" "b/data/1.rust\345\210\235\351\230\266/2.rust\345\237\272\346\234\254\346\246\202\345\277\265/7.\350\277\224\345\233\236\345\200\274/config.json" index 4a95037..d6c1407 100644 --- "a/data/1.rust\345\210\235\351\230\266/2.rust\345\237\272\346\234\254\346\246\202\345\277\265/7.\350\277\224\345\233\236\345\200\274/config.json" +++ "b/data/1.rust\345\210\235\351\230\266/2.rust\345\237\272\346\234\254\346\246\202\345\277\265/7.\350\277\224\345\233\236\345\200\274/config.json" @@ -2,7 +2,9 @@ "node_id": "rust-9223a1a60a524fff9eea03a352137228", "keywords": [], "children": [], - "export": [], + "export": [ + "return_value.json" + ], "keywords_must": [], "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1.rust\345\210\235\351\230\266/2.rust\345\237\272\346\234\254\346\246\202\345\277\265/7.\350\277\224\345\233\236\345\200\274/return_value.json" "b/data/1.rust\345\210\235\351\230\266/2.rust\345\237\272\346\234\254\346\246\202\345\277\265/7.\350\277\224\345\233\236\345\200\274/return_value.json" new file mode 100644 index 0000000..b137cda --- /dev/null +++ "b/data/1.rust\345\210\235\351\230\266/2.rust\345\237\272\346\234\254\346\246\202\345\277\265/7.\350\277\224\345\233\236\345\200\274/return_value.json" @@ -0,0 +1,7 @@ +{ + "type": "code_options", + "author": "jackymao_com", + "source": "return_value.md", + "notebook_enable": false, + "exercise_id": "" +} \ No newline at end of file diff --git "a/data/1.rust\345\210\235\351\230\266/2.rust\345\237\272\346\234\254\346\246\202\345\277\265/7.\350\277\224\345\233\236\345\200\274/return_value.md" "b/data/1.rust\345\210\235\351\230\266/2.rust\345\237\272\346\234\254\346\246\202\345\277\265/7.\350\277\224\345\233\236\345\200\274/return_value.md" new file mode 100644 index 0000000..12ec23d --- /dev/null +++ "b/data/1.rust\345\210\235\351\230\266/2.rust\345\237\272\346\234\254\346\246\202\345\277\265/7.\350\277\224\345\233\236\345\200\274/return_value.md" @@ -0,0 +1,72 @@ +# 返回值 + +在 rust 中,任何函数都有返回类型,当函数返回时,会返回一个该类型的值。 + +有时候我们看到 main() 函数没有写返回值,实际只是省略了返回的 (), 完整的 main 签名如下: + +```rust +fn main() -> () {} +``` + +函数可以返回单个值 + +```rust +fn inc(n: i32) -> i32 { n + 1 } +``` + +可以以元组形式返回多个值 + +```rust +fn pow_2_3(n: i32) -> (i32, i32) { + (n*n, n*n*n) +} +``` + +可以使用 return 提高返回值,如在条件判断或循环体中,提前用 return 返回值并结束当前函数。 + +还有一种称为发散函数,返回 never type, 这个只需要了解,一般很少会用,实际它不会返回,它使用感叹号 ! 作为返回类型: + +```rust +fn diverging() -> ! { + panic!("This function will never return"); +} +``` + +在 match 或 if 条件判断中,如果将每个分支的值返回,需要每个分支返回相同的类型。 + +以下例子中,能正确返回值的是: + +## 答案 + +```rust +fn add(ele: &mut i32) { + *ele += 1; +} +``` + +## 选项 + +### + +```rust +fn add(ele: &mut i32) { + ele += 1; +} +``` + +### + +```rust +fn add(ele: &mut i32) -> i32 { + ele += 1; +} +``` + +### + +```rust +fn add(ele: i32) -> i32 { + ele += 1; +} +``` + -- GitLab