Rust 如何指定使用if-let时无法推断的类型?

Rust 如何指定使用if-let时无法推断的类型?,rust,Rust,如果let但是Ok(config)没有为toml::from\u str提供类型,我想用编写以下内容 let result: Result<Config, _> = toml::from_str(content.as_str()); match result { Ok(config) => {} _ => {} } // if let Ok(config) = toml::from_str(content.as_str()) { // // }

如果let但是
Ok(config)
没有为
toml::from\u str提供类型,我想用
编写以下内容

let result: Result<Config, _> = toml::from_str(content.as_str());
match result {
    Ok(config) => {}
    _ => {}
}

// if let Ok(config) = toml::from_str(content.as_str()) {
//    
// }
let result:result=toml::from_str(content.as_str());
比赛结果{
Ok(配置)=>{}
_ => {}
}
//如果让Ok(config)=toml::from_str(content.as_str()){
//    
// }

我尝试了
Ok(config:config)
但运气不好。不推断成功类型。

这与
匹配
if let
无关;类型规范由分配给
结果
提供。如果让
工作,则此版本具有

extern crate toml;

fn main() {
    let result: Result<i32, _> = toml::from_str("");
    if let Ok(config) = result {
        // ... 
    }
}
在大多数情况下,您将实际使用成功值。根据使用情况,编译器可以推断类型,您不需要任何类型规范:

fn something(_: i32) {}

match toml::from_str("") {
    Ok(config) => something(config),
    _ => {}
}

if let Ok(config) = toml::from_str("") {
    something(config);
}
如果出于某种原因需要执行转换但不使用该值,则可以在函数调用中使用turbofish:

match toml::from_str::<i32>("") {
//                  ^^^^^^^
    Ok(config) => {},
    _ => {}
}

if let Ok(config) = toml::from_str::<i32>("") {
    //                            ^^^^^^^
}
match toml::from_str::(“”){
//                  ^^^^^^^
Ok(配置)=>{},
_ => {}
}
如果让Ok(配置)=toml::from_str::(“”){
//                            ^^^^^^^
}
另见:


请查看如何创建一个,然后查看您的问题以将其包括在内。我们无法说出代码中存在哪些板条箱、类型、特征、字段等。具体来说,我们不知道什么是
Config
。它是否需要是自定义类型,或者是否可以使用语言中内置的内容?什么是
内容
,它可能只是一个字符串文字吗?理想情况下,制作一些能再现你在网上的错误的东西。谢谢你详细的回答。我不知道你为什么对我的问题不满意,同时又完美地回答了我的问题@帕斯卡,因为谢普猜测你的问题并不能使你的问题变得好。@Stargateur此评论对OP没有帮助;其他人请不要对这样的“指手画脚”评论投赞成票。来吧,人们;建设性反馈。”“你的问题不好”没有任何意义。@Doug我不认为这是一个“吹毛求疵”的评论,它感觉像是对“为什么你对我的问题不满意,同时又回答了问题”的直接回应。这是真的:仅仅因为一个人可以从原始问题构建一个MCVE来回答它,并不能使原始问题变得好。OP已经对如何改进他们的问题提出了一些建议,并选择忽略这些建议。@当否决票的根本原因被删除时,Pascal和否决票总是可以被删除;改进一个问题很少为时已晚。
match toml::from_str::<i32>("") {
//                  ^^^^^^^
    Ok(config) => {},
    _ => {}
}

if let Ok(config) = toml::from_str::<i32>("") {
    //                            ^^^^^^^
}