gpt4 book ai didi

cookies - 为什么 “rust cookie::CookieJar”可以通过str类型获取值

转载 作者:行者123 更新时间:2023-12-03 11:34:05 25 4
gpt4 key购买 nike

我知道基础数据结构是HashSet,但是为什么get方法可以使用&str类型而不是cookie结构?
cargo.toml

[dependencies]
cookie = "0.14"
src/main.rs
use cookie::{Cookie, CookieJar};

fn main() {
let mut jar = CookieJar::new();

jar.add(Cookie::new("a", "one"));
jar.add(Cookie::new("b", "two"));

assert_eq!(jar.get("a").map(|c| c.value()), Some("one"));
assert_eq!(jar.get("b").map(|c| c.value()), Some("two"));

jar.remove(Cookie::named("b"));

assert!(jar.get("b").is_none());
}

最佳答案

cookie-rs implemented的作者 Hash Borrow 特性用于 HashSet 的值。
这是一个模仿相同行为的示例:

use std::borrow::Borrow;
use std::hash::{Hash, Hasher};
use std::collections::HashSet;

#[derive(Debug, Eq)]
struct Cookie<'a> {
name: &'a str,
id: u64,
}

impl Hash for Cookie<'_> {
fn hash<H: Hasher>(&self, state: &mut H) {
self.name.hash(state);
}
}

impl PartialEq for Cookie<'_> {
fn eq(&self, other: &Cookie) -> bool {
self.name == other.name
}
}

impl Borrow<str> for Cookie<'_> {
fn borrow(&self) -> &str {
self.name
}
}

fn main() {
let mut cookies: HashSet<Cookie> = HashSet::new();

cookies.insert(Cookie {
name: "example",
id: 42,
});

println!("{:?}", cookies.get("example"));
}
那会给我们:
Some(Cookie { name: "example", id: 42 })

关于cookies - 为什么 “rust cookie::CookieJar”可以通过str类型获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63203280/

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