gpt4 book ai didi

Rust 中的字符串引用比较

转载 作者:行者123 更新时间:2023-12-01 15:02:23 25 4
gpt4 key购买 nike

我刚刚确认如何Vec::contains作品。我在下面写了代码,看起来工作正常。

但我不知道它为什么有效,因为它比较 &String类型。这是否意味着即使没有取消引用字符串比较也有效?

struct NewStruct {
string_vec: Vec<Option<String>>,
}

fn main() {
let mut mys = NewStruct {
string_vec: Vec::<Option<String>>::new(),
};
mys.string_vec.push(Some("new array".to_string()));
let ref_st = mys.string_vec.iter().filter(|o|o.is_some()).map(|o|o.as_ref().unwrap()).collect::<Vec<&String>>();
println!("result:{:?}", ref_st.contains(&&("some string".to_string())));
println!("result:{:?}", ref_st.contains(&&("new array".to_string())));
println!("Hello, world!");
f64::from(1234_u64 as i32);
}

最佳答案

Rust 中引用的引用比较总是比较值,而不是地址。这不仅适用于 &String但对于任何 &T .

例如,这不会编译,因为 Foo不实现 PartialEq即使我只是比较引用:

struct Foo;

fn main() {
let a = Foo;
let b = Foo;

assert!(&a == &b);
}
error[E0369]: binary operation `==` cannot be applied to type `&Foo`
--> src/main.rs:7:16
|
7 | assert!(&a == &b);
| -- ^^ -- &Foo
| |
| &Foo
|
= note: an implementation of `std::cmp::PartialEq` might be missing for `&Foo`
PartialEq引用的实现是

impl<'_, '_, A, B> PartialEq<&'_ B> for &'_ A where
A: PartialEq<B> + ?Sized,
B: ?Sized,

你可以看到检查 &A == &B需要能够做到 A == B .

关于Rust 中的字符串引用比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60312238/

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