gpt4 book ai didi

rust - 在 Rust 中匹配字符串元组

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

这是那些简单但我不知道如何做的事情之一。

简单地说:

pub fn pair_matcher(tup: &(String, String)) {
match tup {
&("foo".as_string(), "bar".as_string()) => print!("foobar"),
_ => print!("Unknown"),
}
}

我得到了错误

-:3:17: 3:18 error: expected `,`, found `.`
-:3 &("foo".as_string(),"bar".as_string())=> { print!("foobar"); }
^

这个怎么搭配?

最佳答案

匹配的每个分支的左侧不是表达式,它是一个模式,它限制了可以去那里的内容基本上只是文字(加上像 ref 这样改变绑定(bind)行为的东西);函数调用就出来了。考虑到 String 的工作方式,不可能将其中之一放入一个模式中(因为您不能静态地构造一个)。它可以通过 if 语句来实现:

if tup == ("foo".to_string(), "bar".to_string()) {
print!("foobar")
} else {
print!("Unknown")
}

... 或者通过截取 String 的一部分,生成 &str 类型,可以按字面意义构造:

match (tup.0.as_slice(), tup.1.as_slice()) {
("foo", "bar") => print!("foobar"),
_ => print!("Unknown"),
}

每次构造一个新的 String 是一种昂贵的做事方式,而使用切片几乎是免费的,不需要分配。

注意 .0.1 需要 #![feature(tuple_indexing)] 在 crate 上;没有它也可以:

 let (ref a, ref b) = tup;
match (a.as_slice(), b.as_slice()) {
("foo", "bar") => print!("foobar"),
_ => print!("Unknown"),
}

因为,你看,let 语句的左侧也是一个模式,所以你可以用它拉开元组,引用每个元素,使用 (ref a, ref b) 生成 ab 类型的变量 &String

Patterns section of the guide详细介绍了该主题。

关于rust - 在 Rust 中匹配字符串元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27078250/

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