面试题答案
一键面试隐式转换规则
在Rust中,隐式转换并不像其他语言那样常见。不过,对于数字类型,Rust有一些内置的转换特性,例如从较小范围的整数类型转换到较大范围的整数类型,这通常是安全的。对于数组,如果存在从i32
到目标类型的合理转换(比如i64
,因为i32
可以无损转换为i64
),可以使用map
方法来遍历数组并执行转换。
代码示例
fn main() {
let i32_array: [i32; 3] = [1, 2, 3];
let i64_array: Vec<i64> = i32_array.iter().map(|&x| x as i64).collect();
println!("{:?}", i64_array);
}
在上述代码中,我们将i32
类型的数组i32_array
通过map
方法转换为i64
类型的Vec
。这里使用iter
方法来遍历i32_array
,map
方法对每个元素执行as i64
的转换,最后使用collect
方法将结果收集到Vec<i64>
中。
请注意,如果要转换为固定长度数组,需要手动指定数组长度,如下:
fn main() {
let i32_array: [i32; 3] = [1, 2, 3];
let mut i64_array: [i64; 3] = [0; 3];
for (i, &num) in i32_array.iter().enumerate() {
i64_array[i] = num as i64;
}
println!("{:?}", i64_array);
}
这段代码通过遍历i32_array
并将转换后的元素赋值给i64_array
,实现了将i32
类型固定长度数组转换为i64
类型固定长度数组。