JaM
JaM

Reputation: 709

Expected type `bool`, found type `&bool`

I would like to take a bool from a Vec<bool> and compare it in an if statement. How do I solve the following error?

  |
7 |             if cell {
  |                ^^^^ expected bool, found &bool
  |
  = note: expected type `bool`
             found type `&bool`

if cell.clone() works for me but seems a bit hackisch.

Upvotes: 7

Views: 4756

Answers (2)

JaM
JaM

Reputation: 709

Reposting asteriskTheServers answer for visibility:

You can dereference the value with * see rust by example for the specifics.

Upvotes: 1

Shepmaster
Shepmaster

Reputation: 430634

take a bool from a Vec<bool>

Just do that:

let foo = vec![true];
if foo[0] { /* ... */ }

bool implements Copy, so indexing the array will copy the value out.

If you had a reference to the boolean inside the vector, you will need to dereference it:

let foo = vec![true];
if let Some(val) = foo.last() {
    if *val { /* ... */ }
}

Or

let foo = vec![true];
if let Some(&val) = foo.last() {
    if val { /* ... */ }
}

Upvotes: 7

Related Questions