Каков предполагаемый способ соответствовать изменяемому внутреннему перечислению? - PullRequest
0 голосов
/ 02 февраля 2019

Эта игровая площадка - это способы, которые я мог бы придумать, чтобы попытаться сопоставить подсчитанное число внутренних изменяемых перечислений.Однако большинство способов создают ошибку несоответствующих типов, такую ​​как

error[E0308]: mismatched types
  --> src/main.rs:24:9
   |
24 |         Foo::Baz(_) => true
   |         ^^^^^^^^^^^ expected struct `std::rc::Rc`, found enum `Foo`
   |
   = note: expected type `std::rc::Rc<std::cell::RefCell<Foo>>`
              found type `Foo`

или

error[E0308]: mismatched types
  --> src/main.rs:30:9
   |
30 |         Foo::Bar(_) => false,
   |         ^^^^^^^^^^^ expected struct `std::cell::Ref`, found enum `Foo`
   |
   = note: expected type `std::cell::Ref<'_, Foo, >`
              found type `Foo`

Единственный способ, который сработал, заключается в следующем:

match foo_ref.get_mut() {
    Foo::Bar(_) => false,
    Foo::Baz(_) => true
}

Это предполагаемый способ?Даже для доступа только для чтения?

1 Ответ

0 голосов
/ 02 февраля 2019

Вы можете использовать Deref impl Ref:

fn is_baz_get(foo_ref: Rc<RefCell<Foo>>) -> bool {
    match *foo_ref.borrow() {
        Foo::Bar(_) => false,
        Foo::Baz(_) => true
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...