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 4a95037e426ebd80f3213f1cf542e9f9650223b2..d6c1407b99ae995920f783ed72c02d24d99f7cab 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 0000000000000000000000000000000000000000..b137cda05f7d2b48c42216652fd1bfeaa5ccb7e2 --- /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 0000000000000000000000000000000000000000..12ec23d3c8cb4645489ff92ac7af5b93395bff10 --- /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; +} +``` +