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/4.\347\261\273\345\236\213\350\275\254\346\215\242/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/4.\347\261\273\345\236\213\350\275\254\346\215\242/config.json" index d9f3c7aeac5897461727580e93470b7b419bde35..0d9c6eed3ebc9d69de6626c07dd78c34d69a8143 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/4.\347\261\273\345\236\213\350\275\254\346\215\242/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/4.\347\261\273\345\236\213\350\275\254\346\215\242/config.json" @@ -2,7 +2,9 @@ "node_id": "rust-81f36b5f17794dbb973c951ba06e01ea", "keywords": [], "children": [], - "export": [], + "export": [ + "conversion.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/4.\347\261\273\345\236\213\350\275\254\346\215\242/conversion.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/4.\347\261\273\345\236\213\350\275\254\346\215\242/conversion.json" new file mode 100644 index 0000000000000000000000000000000000000000..3d1015c7a604e0bfaa32d5c5af16e21955d770c1 --- /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/4.\347\261\273\345\236\213\350\275\254\346\215\242/conversion.json" @@ -0,0 +1,7 @@ +{ + "type": "code_options", + "author": "jackymao_com", + "source": "conversion.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/4.\347\261\273\345\236\213\350\275\254\346\215\242/conversion.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/4.\347\261\273\345\236\213\350\275\254\346\215\242/conversion.md" new file mode 100644 index 0000000000000000000000000000000000000000..90d58b4baaac391eb7dc2736bdbcf1e84b9a0beb --- /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/4.\347\261\273\345\236\213\350\275\254\346\215\242/conversion.md" @@ -0,0 +1,50 @@ +# 类型转换 + +Rust 是静态类型语言,就是说,它的变量类型一旦明确之后就是固定的,不会再改变。 (shadowing 另说,因为shadowing 本质上定义了另外一个变量,只不过跟前面那个变量同名) + +这导致在 Rust 中,类型的转化没有动态语言那么随心所欲。 + +Rust 类型转换方式主要有 casting (使用 as 语法), to_string(), From 和 Into (以及 try_from 和 try_into), 再就是手写转换(相当于写一个函数,输入的是一种类型,手工构建另一种类型返回) + +问答:下面的代码转出的类型是: + +```rust + +fn main() { + let a = 42.0_f64 as f32 as i32 as i16; + + use std::cell::UnsafeCell; + let five = &UnsafeCell::new(5) as *const UnsafeCell as *const i32 as *mut i32; + + println!("{}, {}", get_type_name(&a), get_type_name(&five)); +} + +fn get_type_name(_:&T) -> &str { + std::any::type_name::() +} + +``` + +## 答案 + +i16, *mut i32 + +## 选项 + +### + +f64, &UnsafeCell + +### + +f32, *const UnsafeCell + +### + +i32, *const i32 + + + +ref: +https://doc.rust-lang.org/std/any/fn.type_name.html +https://doc.rust-lang.org/src/core/cell.rs.html