gpt4 book ai didi

rust - 通过设置变量类型和使用 `as` 进行类型转换有什么区别?

转载 作者:行者123 更新时间:2023-11-29 08:19:46 25 4
gpt4 key购买 nike

这两种情况有什么区别?为什么注释行可以编译但 main 中的最后一行不正确?

如何在没有额外变量的情况下剪切字符串(C++ 中的 substr 带有非常量参数)?

use std::fs::File;
use std::io;
use std::io::Read;

fn read_string(filename: &str) -> Result<String, io::Error> {
let mut s = String::new();
File::open(filename)?.read_to_string(&mut s)?;
Ok(s)
}

fn main() {
let s = read_string("tt.txt").expect("Wow");

// let s2: String = s.chars().skip(0).take(s.len() -2).collect();

println!(
"{}",
s.chars().skip(0).take(s.len() - 2).collect() as String
);
}

最佳答案

显式键入变量不是类型转换。

如别处详尽解释,Iterator::collect需要知道要收集到的具体类型。

类型转换,例如 as 执行的类型转换,需要从一种类型转换为另一种类型。您已经指定了第二个 类型 (String),但编译器仍然无法推断出第一个 类型应该是什么。

涡轮鱼

在今天的 Rust 中你想要的语法是 turbofish:

use std::fs;

fn main() {
let s = fs::read_to_string("tt.txt").expect("Wow");

println!(
"{}",
s.chars().skip(0).take(s.len() - 2).collect::<String>()
);
}

类型归属

作为夜间功能,您还可以使用实验性类型归因:

#![feature(type_ascription)]

use std::fs;

fn main() {
let s = fs::read_to_string("tt.txt").expect("Wow");

println!(
"{}",
s.chars().skip(0).take(s.len() - 2).collect(): String
);
}

其他

你不需要写read_string

关于rust - 通过设置变量类型和使用 `as` 进行类型转换有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58287878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com