Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

binary operation `==` cannot be applied to custom struct

Tags:

types

rust

I have this code:

use rand::seq::SliceRandom;
use std::ops::Range;

struct Stack {
    settings: bool
}

fn generate_random_value(number: u8, cards: &mut Vec<Stack>) -> Vec<&Stack> {
    let mut overflow = vec![];
    let pos: usize = 2;
    for _ in (Range { start: 0, end: number } ) {
        let card = cards.choose(&mut rand::thread_rng()).unwrap();
        overflow.push(card);
        let elem = cards.iter().position(|&x| &x == card).unwrap();
    };
    return overflow
}

fn main() {
    let stack_one = Stack {
        settings: true
    };

    let stack_two = Stack {
        settings: false
    };

    let mut vector = vec![stack_one, stack_two];
    let _gen_num = generate_random_value(2, &mut vector);
}

Why does the error occur? The types are the same; &Stack and &Stack. How can I get rid of the error?

Online rust

like image 339
fish0fqwerty Avatar asked Mar 16 '26 03:03

fish0fqwerty


1 Answers

In your example, you can derive PartialEq trait:

#[derive(PartialEq)]
struct Stack {
    settings: bool
}

In more complex situation, you can overload it:

impl PartialEq for Stack {
    fn eq(&self, other: &Self) -> bool {
        ... Your logic ...
    }
}
like image 145
user1635327 Avatar answered Mar 17 '26 17:03

user1635327