与元组匹配的类型 + Option/Some

Type Matching with a Tuple + Option/Some

我已经在 Rust 项目上工作了很长一段时间来学习 Rust 并且遇到了一个障碍,我已经工作了很长一段时间并且不确定是否可以在 Rust 中进行。

主要目标
我希望能够将一个元组 (x, y) 与另一个元组进行比较,但如果其中一个值(在同一位置)匹配,则表达式的计算结果为真。例如。

(x, y) == (a, y) = True
(x, z) == (z, x) = False
(x, z) == (x, b) = True

我试过的
我知道执行匹配语句是执行此操作的最直接方法,但我将此元组传递给第三方函数,该第三方函数使用此元组查询 Map。

所以我尝试使用 Option,并用 Some 包装值并尝试做类似

的事情
(Some(_), Some(a)) == (Some(g), Some(a)) = Want this to equal true.

但是没有效果。

我想做的事情在 Rust 中可行吗?我该怎么做才能做到这一点?非常感谢您的宝贵时间。

编辑:
为了更清楚地说明这一点,这是使用此元组的函数。

let entries_data = ENTRIES.may_load(deps.storage, (<<<anything>>>, address));

此元组用于查询地图,我希望能够使用允许其中一项内容为任何内容的元组进行查询(因此它仅与元组中的一项匹配)。

Rust match 只能匹配静态模式。您无法匹配变量。

正确的方法很简单if:

if a.0 == b.0 || a.1 == b.1 { ... }

您可以创建一个新类型并为其实现 PartialEq

也许是这样的:

struct MyTuple<T: PartialEq>(pub T, pub T);

impl<T: PartialEq> PartialEq for MyTuple<T> {
    fn eq(&self, other: &Self) -> bool {
        self.0 == other.0 || self.1 == other.1
    }
}

impl<T: PartialEq> Eq for MyTuple<T> {}

fn main() {
    let a = MyTuple(1, 2);
    let b = MyTuple(1, 3);
    let c = MyTuple(4, 2);
    let d = MyTuple(3, 1);
    let e = MyTuple(1, 5);
    
    println!("(1, 2) == (4, 2) : {}", a == c);
    println!("(1, 3) == (3, 1) : {}", b == d);
    println!("(1, 3) == (1, 5) : {}", b == e);
    // (1, 2) == (4, 2) : true
    // (1, 3) == (3, 1) : false
    // (1, 3) == (1, 5) : true
}

example in rust playground