Токио-асинхронный с чертой

Если ваши data.frames приведены в примере, который вы могли бы сделать:

dfC <- dfA
dfC[-1] <- as.integer(dfB[-1] > dfA[-1])
dfC
  index B C
1     1 1 0
2     2 1 1
3     3 1 0
4     4 0 1
5     5 0 0

[-1] на data.frame выбирает весь файл данных, кроме первого столбца.

1
задан mq7 21 January 2019 в 11:35
поделиться

1 ответ

Ни async функций, ни impl Trait не допускаются в чертах. Вы можете использовать связанные типы, чтобы стать ближе. Вот некоторые идеи:

pub trait ResourceTrait {
    type FutType: Future<Output = ()>;

    fn prepare(&mut self, auth: &str) -> Self::Next;
}

Реализация этого в настоящее время немного сложна, так как некоторые из необходимых инструментов либо еще не доступны, либо стабильны, либо содержат ошибки.

Это может быть реализовано как:

impl ResourceTrait for Resource {
    type FutType = FutureObj<'static, ()>;

    fn prepare(&mut self, auth: &str) -> FutureObj<'static, ()> {
        FutureObj::new(Box::new(
            async move {
                // Do async things
                // You might get a lifetime issue here if trying to access auth,
                // since it's borrowed.
            }
        ))
    }
}

Альтернативой с экзистенциальными типами может быть:

impl ResourceTrait for Resource {
    // this is required since the real type of the async function
    // is unnameable
    existential type FutType = Future<Output = ()>;

    fn prepare(&mut self, auth: &str) -> Self::FutType {
        async move {
            // Do async things. Might still encounter the same borrowing issues,
            // since the lifetime of the returned Future isn't coupled to the
            // lifetime of self.
            // The workaround is to make copies of all required fields and move
            // them into the Future
        }
    }
}

Это может работать или не работать (так как функция находится в процессе разработки) , Для правильного заимствования таких параметров, как self или auth в возвращаемом будущем, нам также может потребоваться, чтобы вначале были доступны общие ассоциированные типы.

Чтобы обойти проблемы заимствования для self, вы можете определить

struct Resource {
    inner: Arc<ResourceInner>, // carries all actual state
}

, чтобы скопировать inner в prepare и переместить его в Future.

0
ответ дан Shepmaster 21 January 2019 в 11:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: