我正在try 用Rust编写一个简单的函数,它会问用户一个问题,希望得到"你"或"我"的答案.它应该返回一个布尔值,或者再次询问用户是否回答错误.我想到了:

fn player_starts() -> bool {                                                    
    println!("Who will start (me/you)");                                       
    loop {                                                                      
        let input = readline::readline(">");                                    
        match input {                                                           
            Some("me") => return true,                                          
            Some("you") => return false,                                        
            _ => None,                                                          
        }                                                                          
    }                                                                           
}       

我得到的是:

error: mismatched types:
 expected `collections::string::String`,
    found `&'static str`
(expected struct `collections::string::String`,
found &-ptr) [E0308]

有没有办法强迫文字在这里起作用,或者有没有更好的方法来实现我的目标?

推荐答案

这应该是有效的:

fn player_starts() -> bool {                      
    println!("Who will start me/you)");                    
    loop {
        let input = readline::readline(">");
        match input.as_ref().map(String::as_ref) {
            Some("me") => return true,
            Some("you") => return false,
            _ => ()
        }
    }
}

注意match语句中的表达式,其中我们将Option<String>转换为Option<&str>.

Rust相关问答推荐

错误[E0793]具体何时发生:对打包字段的引用未对齐触发?

为什么这些From A和From B植入会导致重复的实现错误?

按下按钮时如何在服务器中创建文件并在本地下载?

如何在不安全的代码中初始化枚举 struct

关于Rust 中回归的逻辑

如何处理动态 struct 实例化?

如何使用syn插入 comments ?

如何在 struct 的自定义序列化程序中使用serde序列化_WITH

在IntoIter上调用.by_ref().Take().rev()时会发生什么情况

Trait bound i8:来自u8的不满意

我们能确定Rust会优化掉Clone()吗?如果它会立即掉落?

为什么Option类型try块需要类型注释?

为什么 Rust 创建的 f32 小于 f32::MIN_POSITIVE?

从字节数组转换为字节元组和字节数组时,为什么 Transmute 会对字节重新排序?

我什么时候应该使用特征作为 Rust 的类型?

哪些特征通过 `Deref` 而哪些不通过?

为什么 File::read_to_end 缓冲区容量越大越慢?

如何展平以下嵌套的 if let 和 if 语句?

只有一个字符被读入作为词法分析器的输入

使用部分键从 Hashmap 中检索值