为何Rust中第一个match块可编译第二个不行?String::from匹配疑问
Rust match分支编译错误及String::from相关问题解答
编译错误原因
Rust的match表达式要求分支必须是模式(Pattern),而非普通表达式:
- 第一个代码块里的
string1、string2属于变量绑定模式,是Rust允许的合法模式,编译器会将匹配值绑定到这些变量(或遮蔽同名外部变量),因此可以正常编译。 - 而
String::from("string1")是函数调用表达式,不属于Rust支持的匹配模式类型。Rust的模式仅支持字面量、变量绑定、结构体/枚举变体、通配符等语法结构,不能直接放置函数调用。
如果需要匹配特定String值,可通过**匹配守卫(match guard)**实现,示例代码:
let target = String::from("target_str"); match target { s if s == String::from("string1") => println!("匹配到string1"), s if s == String::from("string2") => println!("匹配到string2"), _ => println!("无匹配"), }
String::from的返回类型与对应函数
String::from的返回类型确实是String,它是std::string::String对From trait的实现方法。具体来说,当你传入字符串字面量(&str)调用String::from时,实际调用的是From<&str> for String这个trait实现中的from关联函数,作用是将栈上的字符串切片转换为堆分配的String实例。
此外,String::from(s)和s.into()(当s为&str类型时)是等价的,二者基于同一套trait机制实现。
内容的提问来源于stack exchange,提问作者user2138149
相关产品推荐
相关产品推荐

