ложное предупреждение "присвоенное значение никогда не читается" - PullRequest
0 голосов
/ 14 мая 2019

Я получаю это предупреждение:

 Compiling substrate-transaction-graph v2.0.0 (/home/niko/sub/substrate/core/transaction-pool/graph)
warning: value assigned to `altered_priority` is never read
   --> core/transaction-pool/graph/src/pool.rs:137:15
    |
137 |                         let mut altered_priority=priority;
    |                                 ^^^^^^^^^^^^^^^^
    |
    = note: #[warn(unused_assignments)] on by default
    = help: maybe it is overwritten before being read?

При составлении этого кода:

match self.api.validate_transaction(at, xt.clone())? {
    TransactionValidity::Valid { priority, requires, provides, longevity } => {
        info!(target: "txpool","priority before alteration: priority={:?}",priority);
        let mut altered_priority=priority;
        altered_priority=1;
        Ok(base::Transaction {
            data: xt,
            bytes,
            hash,
            priority: altered_priority,
            requires,
            provides,
            valid_till: block_number.as_().saturating_add(longevity),
         })
     },
     TransactionValidity::Invalid(e) => {
         bail!(error::Error::from(error::ErrorKind::InvalidTransaction(e)))
     },
     TransactionValidity::Unknown(e) => {
         self.listener.write().invalid(&hash);
         bail!(error::Error::from(error::ErrorKind::UnknownTransactionValidity(e)))
    },
}

Я добавил log сообщений, и после сброса переменных я могу подтвердить, что у них есть значения, которые они должны иметь (после выполнения кода), то есть поле priority в структуре Transaction действительно изменилось:

2019-05-13 21:41:17 priority before alteration: priority=107
2019-05-13 21:41:17 Map TX begins
2019-05-13 21:41:17 TX IS OK: Transaction { hash: 0x79832c9790aee4b199a046cce27e46bb7e941f38e41d25629c922c318cf7c3a2, priority: 1, valid_till: 18446744073709551615, bytes: 107, requires: [], provides: [d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d0200000000000000], data: 81ffd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27df063b12602c33fa92df4895ab3ecd9f2ad72544bd4b55f1c6c91c8c107dba3654fd13ca5e81612a7fe011414ca604e8f99feb1ed35ce471361ee2c14defdc503080003000ca10f}
2019-05-13 21:41:17 TX priority: 1
2019-05-13 21:41:17 Ok(Transaction { hash: 0x79832c9790aee4b199a046cce27e46bb7e941f38e41d25629c922c318cf7c3a2, priority: 1, valid_till: 18446744073709551615, bytes: 107, requires: [], provides: [d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d0200000000000000], data: 81ffd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27df063b12602c33fa92df4895ab3ecd9f2ad72544bd4b55f1c6c91c8c107dba3654fd13ca5e81612a7fe011414ca604e8f99feb1ed35ce471361ee2c14defdc503080003000ca10f})
2019-05-13 21:41:17 Map TX ends

На самом деле, даже без сброса значений, из самого кода очевидно, что значение используется при создании структуры Transaction. Итак, это ошибка в Rust?

1 Ответ

5 голосов
/ 14 мая 2019

Вы написали let mut altered_priority = priority;, за которым сразу следует altered_priority = 1;.Компилятор предупреждает вас, что начальное значение priority, которое вы присвоили altered_priority в первом из этих двух операторов, никогда не читается.Это правильно: единственное значение, когда-либо считываемое из переменной altered_priority, это 1, а не priority.

Нет причин писать одно значение, а затем немедленно и безоговорочно заменять его другим.Вы могли бы заменить эти два утверждения просто let altered_priority = 1;.(Или вы можете избавиться от переменной и написать priority: 1 вместо priority: altered_priority ниже.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...